Kafka'nın anahtar / değer çifti tabanlı mesajlaşmasının amacı nedir? [kapalı]


97

Tüm örnekler arasında Kafka | üreticiler , ProducerRecordanahtar / değer çiftini yalnızca aynı türde değil (tüm örnekler gösterir <String,String>), aynı değeri gösterir . Örneğin:

producer.send(new ProducerRecord<String, String>("someTopic", Integer.toString(i), Integer.toString(i)));

Ancak Kafka belgelerinde, anahtar / değer kavramının (ve onun altında yatan amacı / faydasının) nerede açıklandığını bulamıyorum. Geleneksel mesajlaşmada (ActiveMQ, RabbitMQ, vb.) Her zaman belirli bir konu / kuyruk / değiş tokuş için bir mesaj gönderdim. Ancak Kafka, normal bir ole dizesi mesajı yerine anahtar / değer çiftlerine ihtiyaç duyan ilk komisyoncudur.

Bu yüzden şunu soruyorum: Üreticilerin KV çiftleri göndermesini istemenin amacı / faydası nedir?

Yanıtlar:


93

Kafka , bölümlerden oluşan dağıtılmış bir günlüğün soyutlamasını kullanır . Bir günlüğün bölümlere ayrılması, sistemin ölçeğinin genişletilmesine olanak tanır.

Anahtarlar , bir mesajın eklendiği bir günlük içindeki bölümü belirlemek için kullanılır. Değer, mesajın gerçek yükü iken. Örnekler aslında bu açıdan çok "iyi" değil; genellikle değer olarak karmaşık bir türe sahip olursunuz (bir demet türü veya bir JSON veya benzeri gibi) ve anahtar olarak bir alanı çıkarırsınız.

Bkz: http://kafka.apache.org/intro#intro_topics ve http://kafka.apache.org/intro#intro_producers

Genel olarak anahtar ve / veya değer de olabilir null. Anahtar nullrastgele bir bölüm ise, seçilen olacaktır. Değeri ise nullo yapabilirsiniz durumda özel "Sil" anlambilgisi bir konu (Log-sıkıştırma yerine log-tutma politikasını etkinleştirmek http://kafka.apache.org/documentation#compaction ).


2
Ve özellikle, tuşlar da birlikte, Kafka'nın akışı API alakalı bir rol oynar KStreamve KTable- bakınız burada .
2017

12
Tuşlar edebilir bölümü belirlemek için kullanılabilir, ancak üreticinin sadece varsayılan bir stratejidir. Nihayetinde, hangi bölümün kullanılacağını seçen üreticidir .
gvo

@gvo Anahtarın daha fazla kullanımı var mı?
leoconco

1
Günlük sıkıştırma bağlantısında belirtildiği gibi, anahtar başına bir mesajın yalnızca bir örneğini tutmak için kullanılabilir. Diğer kullanım durumlarını bilmiyorum.
gvo

2
partitionParametreyi belirtirseniz, kullanılacak ve anahtar "yok sayılacaktır" (veya ders, anahtar yine de konuya yazılacaktır). - Bu, anahtarlarınız olsa bile özelleştirilmiş bir bölümlemeye sahip olmanızı sağlar.
Matthias J. Sax

17

Geç ekleme ... Aynı anahtardaki tüm mesajların aynı bölüme gitmesi için anahtarı belirtmek, bir konuyla ilgili bir tüketici grubunda birden fazla tüketiciniz olacaksa, mesaj işlemenin düzgün şekilde sıralanması için çok önemlidir.

Anahtar olmadan, aynı anahtardaki iki mesaj farklı bölümlere gidebilir ve gruptaki farklı tüketiciler tarafından sıra dışı işlenebilir.


-1

Başka bir ilginç kullanım örneği

Kullanıcı kimliklerini göndermek için Kafka konularındaki anahtar özniteliği kullanabilir ve ardından akış olaylarını (değer özniteliklerinde depolanan olaylar) almak için bir tüketiciyi bağlayabiliriz. Bu, makine öğrenimi modellerinizde özellikler oluşturmak için kullanıcı olay dizilerinin herhangi bir maksimum geçmişini işlemenize izin verebilir.

Yine de bunun mümkün olup olmadığını öğrenmem gerekiyor. Cevabımı daha fazla ayrıntıyla güncellemeye devam edecek.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.