Mic*_*ael 6 bigdata apache-kafka kubernetes google-cloud-dataflow apache-beam
在努力使Java的KafkaIOIT适应大型数据集时,我遇到了一个问题。我想通过一个Kafka主题推送1亿条记录,验证数据的正确性,同时检查KafkaIO.Write和KafkaIO.Read的性能。
为了执行测试,我使用了来自Beam回购(此处)的Kubernetes上的Kafka集群。
预期的结果是,首先以确定性的方式生成记录,然后将它们写入Kafka-这结束了写入管道。至于读取和正确性检查-首先,从主题读取数据,然后将其解码为String表示形式,然后计算整个PCollection的哈希码(有关详细信息,请检查KafkaIOIT.java)。
在测试期间,我遇到了几个问题:
从Kafka主题读取预定的记录数时,每次的哈希值都不同。
有时并非所有记录都被读取,并且Dataflow任务会无限期地等待输入,偶尔会引发异常。
我相信有两种可能的原因导致此现象:
Kafka集群配置有问题
或KafkaIO在大数据量上表现不正常,从而重复和/或删除记录。
我找到了一个我认为可以解释第一个行为的Stack答案: 链接 -如果消息多次传递,则整个集合的哈希值显然会发生变化。
在这种情况下,我真的不知道如何在Beam中配置KafkaIO.Write来产生一次。
这就留下了无法解决的消息问题。你能帮我吗?
正如评论中提到的,一个实际的方法是从小处开始,看看这是否是一个扩大规模的问题。例如,从 10 条消息开始,然后将数字相乘,直到看到奇怪的东西。
此外,值得注意的一件事是,您将数据发送到主题,并在从主题读取后检查哈希值。但是,您没有提到分区,是否有可能因为存在多个分区而实际上看到不同的结果?
Kafka 保证分区内的顺序。
归档时间: |
|
查看次数: |
117 次 |
最近记录: |