【问题标题】:Sort messages across Kafka partitions and put it in another Kafka topic跨 Kafka 分区对消息进行排序,并将其放入另一个 Kafka 主题中
【发布时间】:2020-01-19 02:59:51
【问题描述】:

我有一个带有 X 分区的 Kafka 主题。每条消息都有一个时间戳,ts。有人可以建议我以某种方式对所有分区中的所有消息(基于ts)进行排序,并将其放入带有Y 分区的新主题(Y < X 其中Y 也可以是1)?

在此操作期间,不会将新数据添加到原始 Kafka 主题中。我试图避免将所有数据缓冲到临时数据存储中进行排序。所以基本上我正在寻找关于流数据的X-Way merge

有人可以告诉我这是否可以在 java 中使用 Kafka Streams API 有效地完成?

【问题讨论】:

  • 听起来您应该将所有分区转储到可以排序的某个数据库中
  • 排序和流处理不能很好地结合在一起。我同意@cricket_007 的观点,将数据导出到某个“批处理”系统并在那里对数据进行排序可能是更好的选择。
  • @MatthiasJ.Sax - 据我所知,使用 Kafka 流进行 K-Way 合并是不可能的吗?我指的是这里提到的算法stackoverflow.com/a/47041870/785523
  • merge() 运算符不进行任何排序。比较明确说明这一点的 JavaDocs:kafka.apache.org/24/javadoc/org/apache/kafka/streams/kstream/…

标签: java apache-kafka apache-kafka-streams


【解决方案1】:

这是基于我上次经验的最佳建议,因为您不想在一个地方缓冲所有内容,您可以花一个时间间隔,比如 30 分钟,因此您从分区中提取所有数据,直到您在其中获取数据时间范围说上午 9:00 到上午 9:30 并将其排序并放入目标,接下来您开始提取从上午 9:30 开始的下一个数据。 尽管在 9:30 数据之后,由于数据延迟,您可能会获得 9:27 数据,因此在处理这批数据后,您可能会出现一个 9:29 的数据点和另一个 9:27 的数据点,但是您会发现9:10 到 9:20 之间的所有数据都已排序。 现在,您可以采取的时间范围越高,准确性越高。如果您需要 100% 排序,您可能必须使用不同的数据框再次迭代此目标数据以进一步排序。

【讨论】:

猜你喜欢
  • 2017-04-29
  • 1970-01-01
  • 2019-10-09
  • 1970-01-01
  • 2021-03-18
  • 2019-06-17
  • 2016-04-18
  • 2020-03-02
  • 1970-01-01
相关资源
最近更新 更多