无法使用控制台使用者读取来自Kafka主题的消息

时间:2018-07-11 13:18:26

标签: apache-kafka ksql

我在stream1(版本5.0 Beta)中创建了KSQL,其主题为topic1avro。我可以使用topic1阅读kafka-avro-console-consumer上的所有消息。

然后,我在stream2的{​​{1}}中创建了KSQL,该消息基于stream1格式,用于消息和名为json的主题。我可以使用topic2

阅读topic2上的所有消息

我基于kafka-console-consumerstream3的消息格式创建了KSQL的{​​{1}},消息主题为stream2。但是,我无法使用json阅读topic3上的消息。

使用topic3我在kafka-console-consumer的各个分区上得到了偏移量,但是没有打印任何实际消息。

消息似乎在主题中,但kafkacat而非topic3都无法打印。

尝试使用kafkacatkafka-console-consumer运气不佳。

这是KSQL语句

--from-beginning

其他信息

--offset earliest --partition 0中,如果我运行CREATE STREAM stream1(p_id STRING, location STRING, u_id STRING, r_id STRING, b_id STRING, recorded_dtm STRING, v_type STRING, value STRING) WITH (kafka_topic='topic1', value_format='AVRO'); CREATE STREAM stream2 WITH (KAFKA_topic='topic2', VALUE_FORMAT='json', TIMESTAMP='RECORDED_TIMESTAMP') AS select P_ID+'-'+LOCATION+'-'+U_ID+'-'+R_ID+'-'+B_ID+'-'+V_TYPE as PARTITION_KEY, LOCATION, U_ID, R_ID, V_TYPE, B_ID, STRINGTOTIMESTAMP(recorded_dtm, 'yyyyMMddHHmmss') as RECORDED_TIMESTAMP, P_ID, VALUE, RECORDED_DTM,'NM' as DATA_TYPE FROM stream1 PARTITION BY PARTITION_KEY; CREATE STREAM stream3 WITH (KAFKA_topic='topic3', VALUE_FORMAT='json', TIMESTAMP='RECORDED_TIMESTAMP') AS select PARTITION_KEY, LOCATION, U_ID, R_ID, V_TYPE, B_ID, RECORDED_TIMESTAMP, P_ID, VALUE, RECORDED_DTM FROM stream2 PARTITION BY PARTITION_KEY; 并运行ksqlSET 'auto.offset.reset'='earliest';,则看到打印的记录,但是select * from stream1 limit 5;不返回任何记录。

如果我运行select * from stream2 limit 5,我会得到

邮件总数:212

恰好是我发送给topic1的邮件数量

1 个答案:

答案 0 :(得分:0)

根本原因是发送到主题1上的消息的Timestamp上的STREAM3值早于{{1}中设置的recorded_dtm值}。

我们的log.retention.hours值设置为kafka server.properties,并且recorded_dtm值早于24小时。这导致log.retention.hours24 hours中的邮件根据保留策略被立即删除。