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线上问题优化:消息丢失重复消费消息积压延时队列顺序消费