【问题标题】:Kafka one consumer with two different checkpoints卡夫卡一个消费者有两个不同的检查点
【发布时间】:2018-06-07 14:57:05
【问题描述】:

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

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

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

【问题讨论】:

  • 是否可以将这 10% 的记录放到单独的主题中?
  • @amethystic 不幸的是没有。

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


【解决方案1】:

以下是你可以做的事情来完成上述任务。

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

  • 使您的 Kafka 使用者可配置,即您可以在启动使用者时轻松传递轮询间隔、batchSize 和批处理超时。

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

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

【讨论】:

  • 不幸的是,我无法控制如何将数据放入 Kafka 主题中。 ://
  • @burakemre 那么如何在 10% 和 90% 之间分配数据呢?
猜你喜欢
  • 2019-07-03
  • 2018-05-05
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-14
  • 2016-10-26
  • 1970-01-01
相关资源
最近更新 更多