我使用publishKafka_0_10处理器将流文件从nifi发布到kafka。在通过代码从Kafka读取数据时,不维护数据序列(根据时间戳排序)。我的数据集如:时间戳,通道,值。
只是为了调试,我使用PutSql向phoenix发布相同的流文件,我可以看到在Phoenix表中,数据是顺序的(根据时间排序)。如果有人解释我为什么我不能顺序从kafka读取数据,那将是很好的。 kafka中的主题只有一个分区。提前谢谢。
答案 0 :(得分:0)
Kafka只保证分区内的订单。既然你说这是一个分区,那好吧。
我的数据集如:timestamp,channel,value。
消息时间戳只是记录元数据,(您自己的时间戳不会被NiFi传递到Kafka ProducerRecord类中)。此外,时间戳对订购没有任何影响。换句话说,如果一个"延迟时间戳"消息是在其他早期"之前提交的。时间,然后是的,它按时间顺序排序,但卡夫卡只看到偏移已经移动。
为什么我无法顺序从kafka读取数据
你是,但按顺序将消息提交给Kafka。
您的消费者代码应该提取记录时间戳,并相应地重新排序。例如,Kafka Connect有一个Record Timestamp提取器,它可以根据这个时间将数据写入分区目录。我假设您的PutSQL处理器正在读取顺序排序的FlowFiles(它们有自己的时间戳,而不是数据中的时间戳,除非您运行了ModifyAttribute处理器),而不是使用ConsumeKafka处理器?