我想要实现的是确保我的Kafka流消费者没有滞后时间。
我有一个简单的Kafka流应用程序,以GlobalKTable的形式实现了一个主题作为存储。
当我尝试通过命令在Kafka上描述消费者时:
kafka-consumer-groups --bootstrap-server localhost:9092 --describe --group my-application-id
我看不到任何结果。而且也没有错误。当我按以下方式列出所有消费者时:
kafka-consumer-groups --bootstrap-server localhost:9092 --describe --all-groups
我的应用程序使用者正确列出。
有什么想法可以找到我无法描述的其他信息吗? (可以正确描述写给主题的任何其他Kafka流消费者。)
答案 0 :(得分:2)
如果您的应用程序仅 将一个主题具体化为GlobalKTable
,则不会形成任何消费者组。在内部,“全局使用者”不使用subscribe()
,而是使用assign()
,并且没有配置使用者group.id
(可以从日志中进行验证),也没有提交偏移量。
原因是,所有应用程序实例都需要使用所有主题分区(即广播模式)。但是,设计了一个消费者组,以便不同的实例读取同一主题的不同分区。同样,对于每个使用者组,每个分区只能提交一个偏移量;但是,如果多个实例读取同一分区,并且将使用相同的group.id
提交偏移量,则提交将相互覆盖。
因此,在“广播”数据时使用使用者组是不起作用的。
但是,所有消费者都应暴露“滞后”指标records-lag-max
和records-lag
(参见https://kafka.apache.org/documentation/#consumer_fetch_monitoring)。因此,您应该能够通过JMX挂接以监视滞后。 Kafka Streams也通过KafkaStreams#metrics()
包括客户端指标。