Java 跨Kafka分区对消息进行排序,并将其放入另一个Kafka主题中

Java 跨Kafka分区对消息进行排序,并将其放入另一个Kafka主题中,java,apache-kafka,apache-kafka-streams,Java,Apache Kafka,Apache Kafka Streams,我有一个带有X分区的卡夫卡主题。每条消息都有一个时间戳,ts。有人能给我建议一种方法,在所有分区中对所有消息进行排序(基于ts),并将其放入带有Y分区的新主题中(Y

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

在此操作期间,不会向原始卡夫卡主题添加任何新数据。我试图避免将所有数据缓冲到临时数据存储中进行排序。因此,基本上,我正在寻找流式数据的
X-waymerge


有人能告诉我,使用Kafka Streams API在java中是否可以有效地实现这一点吗?

这是我根据上次经验提出的最佳建议,因为您不想在一个地方缓冲所有数据,所以可以使用一个时间间隔,比如30分钟,因此,您从分区中提取所有数据,直到您在该时间范围内(比如上午9:00到上午9:30)获取数据,然后对其进行排序并将其放入目标,然后开始提取下一个数据,即从上午9:30开始。 虽然在9:30数据之后,由于数据延迟,u可能会获得9:27数据,因此在处理此批次后,您可能会有一个9:29的数据点和另一个9:27的数据点,但是您会发现9:10到9:20之间的所有数据都已排序。
时间越长,精确度越高。如果您需要100%排序,您可能需要使用不同的数据帧再次迭代此目标数据以进行进一步排序。

我希望使用Kafka Streams进行K-Way合并,如中所述,您应该转储某些数据库中的所有分区,在这些数据库中,您可以进行排序,但流处理不能很好地结合在一起。我同意@cricket_007的观点,将数据导出到某个“批处理”系统中,并在那里对数据进行排序可能是一个更好的选择。@MatthiasJ.Sax-就我所知,使用Kafka流进行K-Way合并是不可能的吗?我指的是这里提到的算法。
merge()
运算符不进行任何排序。比较明确说明这一点的JavaDocs: