在 Kafka 流中使用 Session window 来排序记录并插入到 MySQL 数据库中

Use Session window in Kafka stream to order records and insert into MySQL database

根据 KSQLDB 文档,会话 window 可用于根据时间戳对记录进行排序并进行聚合。 我有一个用例,我想按顺序将记录插入 MySQL 中。 我的记录中有一个时间戳字段,我将其用作 ROWTIME,然后尝试对其进行会话 window 并插入到输出流中,该输出流将推入主题,然后推入 RDS。但是在输出流中,我无法根据时间戳对消息进行重新排序。 例子 - 有两条记录 - 11:00AM 处的记录 1 和 11:01AM 处的记录 2,它们都具有相同的主键。这两条记录按顺序在 Kafka 中获取 - Record 2,Record 1。但是在 MYSQL 中,我需要 Record 1,然后是 Record 2,因为 Record 1 的时间戳较低。我尝试了 window 5 分钟的流式会话。但在输出流中,它总是以记录 2、记录 1 的形式出现。

Kafka内部有这种场景吗?我可以重新排序 Kafka 中的记录,然后使用 INSERT INTO 语句将其推入流吗?

目前我正在尝试使用 KSQL 查询,因为我正在使用 confluent Kafka。

会话windows不更改记录的顺序,它们将具有相同键且彼此在某个时间段内的记录组合在一起。

因此会话 windows 不允许您重新排序消息。

重新排序消息不是 ksqlDB 目前适合的用例。如果您尝试编写基于 Kafka Streams 的应用程序,您的运气可能会更好。

Kafka Streams 允许您使用状态存储将输入消息缓冲一段时间以允许无序消息。您应该能够使用标点符号在一段时间后触发缓存消息的输出。您将需要选择您愿意缓冲输入多长时间以允许乱序消息。