卡夫卡一个有两个不同检查点的消费者

时间:2017-12-26 21:59:04

标签: apache-kafka apache-zookeeper kafka-consumer-api apache-kafka-connect

我有一个Kafka消费者项目,它使用来自特定Kafka主题的数据。 90%的记录在我得到它们后立即处理,但我有延迟处理一些记录(10%)。

这些记录需要延迟,我无法提交记录,因此可能导致Kafka将分区重新分配给新节点。为了避免这种情况,我可以读取相同的主题两次,并在第二个消费者中延迟获取数据部分,但它需要反序列化两次,因此需要一个开销。

是否有可能使用单个消费者读取记录但是与Kafka消费者有两个单独的提交?它基本上类似于在提交方面拥有两个不同的消费者,consumer.poll将从单个消费者调用,但每个批次将有两个consumer.commitSync。我会帮助我避免额外的反序列化以及网络成本。

1 个答案:

答案 0 :(得分:0)

下面提到的是你可以做的事情来实现上述任务。

  • 创建一个包含两个主题(T1,T2)的管道,在主题T1中推送所有消息(90%),并在主题T2中将所有消息保留10%。

  • 让您的Kafka消费者可配置,即只要您启动消费者,就可以轻松传递轮询间隔,batchSize和批量超时。

  • 查找逻辑/或者如果您的第二个主题消费是基于时间的,那么安排cron将在需要时启动和停止您的消费者主题T2。
  • 关于消费者群组,您可以将两个主题放在同一个群组中,也可以无关紧要。这完全是你的选择。

通过这种方式,您将保持主题清洁。每次需要处理消息时,您可以通过仅设置管道一次轻松完成。