カフカのコンシューマーは、メッセージのオフセットをどのように管理するのか。

Kafkaのコンシューマーは、メッセージのオフセットを管理するために、手動管理と自動管理の2つの方法があります。

  1. 手動管理: 消費者は、commitSyncまたはcommitAsyncメソッドを呼び出すことで、メッセージのオフセットを手動で送信することができます。手動管理モードでは、消費者はオフセットをいつ送信するか、また送信するオフセットはどれかを柔軟に決定することができます。

サンプルコードは以下の通りです:

while (true) {
    ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
    for (ConsumerRecord<String, String> record : records) {
        // 处理消息
    }
    consumer.commitSync();
}
  1. Enable.auto.commit パラメーターを true に設定することで、消費者は自動的にオフセットを管理することができます。自動管理モードでは、Kafka は定期的にメッセージのオフセットを自動的にコミットします。

下記のサンプルコード:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test-group");
props.put("enable.auto.commit", "true");

KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("test-topic"));

while (true) {
    ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
    for (ConsumerRecord<String, String> record : records) {
        // 处理消息
    }
}

消費者は、実際のニーズに応じて、オフセットを手動で管理するか自動で管理するか選択することができます。手動管理は、より正確な制御を提供しますが、オフセットの提出を処理するためにより多くのコードを書く必要があります。一方、自動管理はより便利ですが、定期的にオフセットを提出することにより、メッセージの重複消費が発生する可能性があります。

コメントを残す 0

Your email address will not be published. Required fields are marked *


广告
広告は10秒後に閉じます。
bannerAds