Kafka Streamで手動でコミットする方法はありますか?
通常、KafkaConsumer
を使用して、以下のようにします。
while (true) {
ConsumerRecords<String, String> records = consumer.poll(100);
for (ConsumerRecord<String, String> record : records){
// process records
}
consumer.commitAsync();
}
手動でcommitを呼び出しているところ。 KStream
用の同様のAPIがありません。
コミットはStreamsによって内部的に完全に自動で処理されるため、通常は手動でコミットする理由はありません。 Streamsはこれをコンシューマーの自動コミットとは異なる方法で処理することに注意してください。実際、内部で使用されるコンシューマーの自動コミットは無効になっており、Streamsはコミットを「手動」で管理します。その理由は、データの損失を防ぐために、処理中の特定の時点でのみコミットが発生する可能性があるためです(状態の更新と結果のフラッシュに関して、多くの内部依存関係があります)。
より頻繁なコミットの場合、StreamsConfig
パラメータ_commit.interval.ms
_を使用してコミット間隔を短くできます。
それでも、低レベルのプロセッサAPIを介して間接的に手動でコミットすることができます。 init()
メソッドを介して提供されるcontext
オブジェクトを使用して、context#commit()
を呼び出すことができます。これは、できるだけ早くコミットするための「Streamsへの要求」にすぎないことに注意してください。直接コミットを発行するわけではありません。