Kafka 流重新分区将数据倾斜到单个分区 - 导致性能问题

问题描述 投票:0回答:1

我有一个用例,我必须根据有效负载值中的参数来计算事件数量

流中的数据类似于 键 -> 字符串(不同且可以很好地扩展且唯一) Value -> json(有很多字段,其中一个字段是日期,这对于大块来说是相同的)

现在我必须根据公共日期字段计算记录

问题是

当我根据新键(日期字段)重新分区流时,通过使用groupby或map或selectkey操作,然后进行聚合。

我最终将流中的所有消息都倾斜到重新分区主题中的一个分区上

这在某种程度上阻碍了性能

随着相同日期的流数据数量的增加,影响呈指数级增长

这个用例有更好的替代方案吗?

#Kafkastream

当我根据新键(日期字段)重新分区流时,通过使用groupby或map或selectkey操作,然后进行聚合。

apache-kafka apache-kafka-streams confluent-platform
1个回答
0
投票

在KAFKA中,很明显,基于一个key进行分组,并且所有具有相同key的后续事件都落入同一个分区(默认情况下),因此只有一个consumer实例会读取所有事件,并且性能问题正如预期的那样。

我不认为日期字段是您分组的理想选择,因为您可能在同一天有许多事件,而您可以使用任何其他唯一字段。

额外的好处是,您可以参考 KAFKA 的遗留单词直方图演示示例并相应地更改您的要求。

https://github.com/apache/kafka/blob/3.6/streams/examples/src/main/java/org/apache/kafka/streams/examples/wordcount/WordCountDemo.java

© www.soinside.com 2019 - 2024. All rights reserved.