2017-07-12 5 views
-1

私はユニークなメッセージをプッシュしたいこれらの3つのパーティションすべてで、パーティション数3のカフカでトピックを作成しました。それを行う方法はありますか? producer.sendはすべてのパーティションで重複メッセージをプッシュします。テストのためにトピックの異なるパーティションでuniqeメッセージをプッシュする方法

私は、次のコードを使用しています:

from kafka import KafkaProducer 
from kafka.errors import KafkaError 

producer = KafkaProducer(bootstrap_servers=['localhost:9092']) 

# Asynchronous by default 
future = producer.send('my-topic', b'raw_bytes') 

をしかし、それはパーティションに重複したメッセージを送信しています。

答えて

0

メッセージにキーを追加してください。 Kafkaのデフォルトのパーティショナーは、重複したキーを持つすべてのメッセージが同じパーティションに移動することを保証します。メッセージ値のmd5ハッシュをメッセージキーとして使用できます。 https://kafka-python.readthedocs.io/en/master/apidoc/KafkaProducer.html#kafka.KafkaProducer.sendから

+0

サンプルコードを共有してください。非常に役に立ちます。 – Avi

0

future = producer.send(topic='my-topic', value= b'raw_bytes', key=None, partition=None, timestamp_ms=None) 

あなたは追加のパーティションを使用してトピックを展開するために何が必要な場合ので、これはお勧めしませんが、あなたは手動で、宛先が自分自身をパーティションに割り当てることができますか?コードを更新する必要はありません。

また、カスタムキーを指定することもできます。 md5の合計が比較的均等な分布になるようにするには、この答えでそれを作成する方法を見てください:https://stackoverflow.com/a/5297483/770425

関連する問題