問題タブ [confluent-kafka-dotnet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net-core - Confluent Kafka コンシューマは、groupId を変更した後にのみメッセージを消費します
Confluent.Kafka を使用する .Net コア コンソール アプリケーションがあります。特定のトピックからメッセージを消費するためのコンシューマーを構築します。このアプリは、毎日数回実行され、指定されたトピックに関するメッセージを消費して処理することを目的としています。
コンシューマの動作を理解するのに少し時間がかかりましたが、グループ ID が以前に使用されたことのないものである場合にのみメッセージを消費します。コンシューマーの groupId を変更するたびに、コンシューマーはサブスクライブしたトピックのメッセージを取得します。しかし、次の実行では、同じ groupId で、consume.Consume は null を返します。
この行動は、同じグループの消費者間の再調整に関連しているようです。しかし、理由はわかりません。消費者はアプリケーションのリフトタイム全体でのみ存在する必要があるためです。アプリを終了する前に、consumer.close() と consumer.Dispose() を呼び出します。これらはコンシューマーを破棄する必要があるため、次の実行時にコンシューマーを作成すると、指定された groupId の最初の単一のコンシューマーになります。しかし、私が言ったように、これは実際に起こることではありません。
トピックに関するメッセージがあることは知っています-コマンドラインで確認します。また、トピックにパーティションが 1 つしかないことも確認しました。
最も奇妙なことは、同じプロセスを実行する別の .net コア コンソール アプリがあり、まったく問題がないことです。
2つのアプリのコードを添付します。
作業中のアプリ - 常に消費:
クラス ConsumerHelper.cs
動作しないアプリ - コンシューマー groupId を使用されていないものに変更した後、最初の実行時にのみ消費します:
クラス Program.cs
クラス ConsumerHelper.cs