恢复/重新平衡时在卡夫卡处理未处理的记录

时间:2020-01-15 03:53:50

标签: apache-kafka spring-kafka

我正在使用Spring Kafka与我的Kafka实例进行接口。假设我有一个带有2个以上分区的主题。

例如,在我的基于Spring Kafka的应用程序崩溃(甚至重新平衡),然后又重新联机并且主题中等待消息的情况下,我目前正在使用一种策略,其中最新的已提交偏移量每个分区的数据都存储在外部存储中,然后我查看消费者对该分区的分配,然后寻找该偏移量以恢复处理。

(这是基于我在O'Reilly的书中读到的策略。)

是否存在一种更好的方法来处理这种情况,以实现“恰好一次”的语义并且不丢失任何等待消息?还是Spring Kafka有更好/更惯用的方式来处理这种情况?

谢谢。

1 个答案:

答案 0 :(得分:1)

您是否有理由不对kafka本身的抵销点进行检查?

通常,您可以选择“恰好一次”处理:

  1. 以事务方式将偏移量和副作用存储在一起。仅当您的副作用进入支持事务的系统(例如数据库)时,这才有可能
  2. 使用kafka交易。这是1的简化变体,只要您的副作用与您从中读取的同一kafka簇相同
  3. 提出一种方案,该方案可让您检测和忽略kafka管道下游的重复项(即幂等)