Kafka 集群丢失或重复消息

Posted

技术标签:

【中文标题】Kafka 集群丢失或重复消息【英文标题】:Kafka cluster loses or duplicates messages 【发布时间】:2020-01-14 00:51:59 【问题描述】:

在调整 Java 的 KafkaIOIT 以处理大型数据集时,我遇到了一个问题。我想通过一个Kafka主题推送100M条记录,验证数据正确性,同时检查KafkaIO.Write和KafkaIO.Read的性能。

为了执行测试,我在 Beam 存储库 (here) 上使用 Kubernetes 上的 Kafka 集群。

预期的结果是,首先以确定的方式生成记录,然后将它们写入 Kafka - 这结束了写入管道。 至于读取和正确性检查——首先从topic中读取数据,解码成String表示后,计算出整个PCollection的hashcode(详见KafkaIOIT.java)。

在测试过程中我遇到了几个问题:

    从Kafka主题中读取预定数量的记录时,每次hash都不一样。

    有时并非所有记录都被读取,Dataflow 任务无限期地等待输入,偶尔会引发异常。

我认为这种行为有两个可能的原因:

Kafka集群配置有问题

或者 KafkaIO 在大数据量、复制和/或删除记录时表现异常。

我找到了一个 Stack 答案,我相信它可以解释第一个行为: link - 如果消息被多次传递,很明显整个集合的哈希值会改变。

在这种情况下,我真的不知道如何在 Beam 中配置 KafkaIO.Write 以只生成一次。

这使得消息被丢弃的问题没有得到解决。你能帮忙吗?

【问题讨论】:

我想尝试在本地重现这个... 能否以较小的数据量重现散列不同,以便检查数据本身是否不同? 【参考方案1】:

正如 cmets 中提到的,一种实用的方法是从小处着手,看看这是否是扩大规模的问题。 例如。从 10 条消息开始,然后将数字相乘,直到你看到奇怪的东西。

此外,突出的一件事是您将数据发送到主题,并在从主题中读取后检查哈希。但是,您没有提到分区,是否可能因为有多个分区,您实际上看到了不同的结果?

Kafka 保证分区内的顺序。

【讨论】:

以上是关于Kafka 集群丢失或重复消息的主要内容,如果未能解决你的问题,请参考以下文章

kafka线上问题优化:消息丢失重复消费消息积压延时队列顺序消费

mq如何保证高可用,解决重复消费、数据丢失问题和顺序性问题

消息中间件 kafka+zookeeper 集群部署测试与应用

kafka什么时候会丢消息(转)

Kafka 业务架构及消息丢失处理方案

troubleshooting记一次Kafka集群重启导致消息重复消费问题处理记录