0

我正在使用 publishKafka_0_10 处理器将流文件从 nifi 发布到 kafka。通过代码从 Kafka 读取数据时,不维护数据的顺序(根据时间戳排序)。我的数据集是这样的:时间戳、通道、值。

只是为了调试,我使用 PutSql 将相同的流文件发布到 phoenix,我可以看到在 Phoenix 表中,数据是顺序的(按时间排序)。如果有人向我解释为什么我不能按顺序从 kafka 读取数据,那就太好了。kafka的topic只有一个partition。提前致谢。

4

1 回答 1

0

Kafka 只保证分区内的顺序。既然你说这是一个分区,那好吧。

我的数据集是这样的:时间戳、通道、值。

消息时间戳只是记录元数据,(您自己的时间戳不会被 NiFi 传递到 Kafka ProducerRecord 类中)。此外,时间戳对排序没有影响。换句话说,如果一个“延迟时间戳”消息在另一个“较早”时间之前提交,那么是的,它在时间上是无序的,但是 Kafka 只是看到偏移量已经移动。

为什么我无法按顺序从 kafka 读取数据

您是,但是按照消息提交给 Kafka 的顺序。

您的消费者代码应该提取记录时间戳并相应地重新排序。例如,Kafka Connect 有一个 Record Timestamp extractor,它可以根据这个时间将数据写入分区目录。我假设您的 PutSQL 处理器正在读取顺序排序的 FlowFiles(它们有自己的时间戳,而不是数据中的时间戳,除非您运行 ModifyAttribute 处理器),而不是使用 ConsumeKafka 处理器?

于 2018-01-09T01:51:58.167 回答