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

时间:2020-01-18 10:44:23

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

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

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

有人可以让我知道使用Kafka Streams API在Java中能否有效地做到这一点吗?

1 个答案:

答案 0 :(得分:1)

根据我的上次经验,这是我最好的建议,因为您不想将所有内容都缓存在一个位置,因此您可能需要30分钟的时间间隔,因此您要从分区中拉出所有数据,直到在其中获取数据为止。时间范围为上午9.00到上午9.30,并将其排序并放入目标,接下来您将开始获取从上午9:30开始的下一个数据。 尽管在9:30数据之后,由于数据延迟,您可能会获得9:27数据,因此在处理此批处理之后,您可能会获得9:29的数据点和9:27的另一个数据点,但是您会发现对9:10到9:20之间的所有数据进行排序。 现在,您可以花的时间越长,准确性就越高。如果您需要100%排序,则您可能不得不再次使用其他数据框对该目标数据进行迭代以进一步排序。