2017-01-20 6 views
0

私はconfluent-kafka-python(https://github.com/confluentinc/confluent-kafka-python)を使用して、Pythonを使用してKafkaにメッセージを送信しています。私はあまり頻繁にメッセージを送信しないので、待ち時間を本当に本当に低くしたい。kafkaプロデューサパラメータは1つのメッセージを送信する必要があります

conf = { "bootstrap.servers" : "kafka-test-10-01", 
     "queue.buffering.max.ms" : 0, 
     'batch.num.messages': 1, 
      'queue.buffering.max.messages': 100, 
       "default.topic.config" : {"acks" : 0 }} 
p = confluent_kafka.Producer(**conf) 
p.produce(...) 

を:しかし、私はこれを行う場合は

、私は約2ミリ秒の遅延で自分の消費者に表示されるようにメッセージを取得することができ、待ち時間はほぼゼロに低下し、私はこれで最初のメッセージを送信した後新しいプロデューサー。後続のメッセージの待ち時間は、2msの近くにあります。

最初のメッセージには約1秒の遅延がありますが、どうして?

+1

公開する前にトピックが既に存在しますか?そうでない場合、余分な時間は、最初のメッセージが公開される前にブローカでトピックを自動作成するのに必要な時間になります。 –

答えて

1

マグナスEdenhill、librdkafkaの著者は、任意のlibrdkafkaクライアントでの待ち時間を少なくするように設定するには、いくつかの有用なパラメータを文書化:

https://github.com/edenhill/librdkafka/wiki/How-to-decrease-message-latency

をあなたの消費者のパラメータは表示されませんが、あなたの説明から、それはのように聞こえます消費者は最初のメッセージが公開される前にポーリングして何も得られない(ヌルメッセージ)ので、再度ポーリングして最初のメッセージを取得する前にデフォルトの500 ms fetch.error.backoff.msの間隔で待機します。その後、メッセージはおそらく十分に速くなっているため、エラー・バックオフはトリガーされません。おそらくfetch.error.backoff.msを低く設定してみてください。

+0

消費者に興味のある設定はありません。私はあなたの答えが正しいとは思わない、なぜなら私が消費者を立ち上げて走らせておくと、遅れがあるかどうかは常にプロデューサー*によって決まるからだ。 – davidbaraff

+0

私はプロデューサーを作成し、メッセージを送信しました。次に、新しい消費者を作成しました。これはauto.offset.reset = 'latest'です。消費者ポーリングを開始しました。最初のメッセージの遅延時間は3msです。だから、プロデューサー側では、最初のメッセージは常に遅れているということは明らかです。他のアイデア?それは重要ではなく、単に好奇心が強いことに注意してください。 – davidbaraff

+0

最後に、私はPythonインタプリタ(プロデューサ側)から手動で送信しているので、メッセージは非常に遅く送信されます。消費者は投票しているだけです。クライアントのコンフィグレーション: conf = {"bootstrap.servers":サーバ、 "group.id": "deb-9"、 "broker.version.fallback": "0.8.2.2"、 "client.id" : "some-deb-id23"、 "default.topic.config": {'auto.offset.reset': 'latest'、 }} – davidbaraff

関連する問題