2017-10-13 12 views
0

Machine_1のpythonスクリプトを使用して、Machine_2のKafkaトピックにいくつかのメッセージを送信しようとしています。 Machine_2Machine_1は同じネットワークにあり、どちらもAzureのVMです。Python-Kafka:スクリプトモードではなく対話モードで実行されているプログラム

コード:sampl.py

from kafka import KafkaProducer 
Producer = KafkaProducer(bootstrap_servers=['Machine_2:9092']) 
Producer.send('test', 'hello') 

私は

のpython sampl.py

として上記のコードを実行した場合Machine_2に達する何もメッセージはありません。私が行う場合ただし、:

のpython -i sampl.py

をその後のメッセージはMachine_2に達します。私はkafka-console-consumer.shを使って同じものをチェックした。私はyum updateMachine_1に入れました。ここにいくつかの図書館がないかもしれないと思っています。しかし、運はまだありません。

ありがとうございました。

+0

どのバージョンを使用しています? –

+0

遅く返事をして申し訳ありません。カフカ版--0.10.2.0、ピソカフカモジュール - kafka_python-1.3.5。 – wonder

答えて

0

kafka-python maintainerはこちら。 Producer.send('test', b'hello')は非同期であり、即時配信を提供しません。あなたが見ている可能性があるのは、プロデューサがネットワーク送信を完了する機会を得る前に、Pythonインタープリタがシャットダウンしていることです。

スクリプトを終了する前にメッセージが送信されるまで待つ場合は、.get(timeout = ...)を使用する必要があります。だから、試してみてください。

Producer.send('test', b'hello').get(timeout=1000)

または交互に、あなたはすべての未送信メッセージのために同じことを行うために)(フラッシュを呼び出すことができます:あなたはカフカ-Pythonとカフカブローカーの

Producer.flush(timeout=1000)

+0

プロデューサがメッセージを送信するデフォルトの定期的な間隔は何ですか?タイムアウト期間内に送信しないとどうなりますか? – wonder

+0

kafka-pythonは定期的な送信間隔を使用しません。データを内部でバッファリングして、より高いスループットのために大きなバッチを作成することもできますが、これはデフォルトでは無効になっています。詳細は、ドキュメントを参照してください:http://kafka-python.readthedocs.io/en/master/apidoc/KafkaProducer.html – dpkp

関連する問題