使用Kafka High Level Consumer 0.8.x防止消息丢失

时间:2016-03-08 22:09:43

标签: apache-kafka kafka-consumer-api

典型的kafka消费者如下所示:

kafka-broker ---> kafka-consumer ---->下游消费者,如弹性搜索

根据Kafka High Level Consumer的文档:

  

'auto.commit.interval.ms'设置是更新的频率   消耗的偏移量写入ZooKeeper

如果发生以下两件事,似乎可能会有消息丢失:

  1. 在从kafka经纪商处检索一些消息后立即提交抵消。
  2. 下游消费者(比如Elastic-Search)无法处理最新批次的消息,或消费者流程本身被杀死。
  3. 如果偏移量基于时间间隔自动提交但它们由API提交,则可能是最理想的。这将确保kafka-consumer只有在收到来自下游消费者的确认他们已经成功消费了消息之后才能发出抵消信号。可能会有一些重播消息(如果kafka-consumer在提交偏移之前死掉),但至少不会有消息丢失。

    如果高级消费者中存在此类API,请告诉我。

    注意:我知道Kafka的0.8.x版本中的低级消费者API,但我不想在我需要的只是高级消费者中的一个简单API时自己管理所有内容。

    价:

    1. AutoCommitTask.run(),查找 commitOffsetsAsync
    2. SubscriptionState.allConsumed()

1 个答案:

答案 0 :(得分:3)

High Level Consumer API中有一个commitOffsets()API可用于解决此问题。

同时设置选项" auto.commit.enable"到"假"所以在任何时候,抵消都是由卡夫卡消费者自动提交的。