版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
kafkaconsumer线程分 用户主线程 和 心跳线程
用户主线程,采用的是单线程设计,如果要设计consumer多线程实例,要注意:
kafkaConsumer不是线程安全的,需要为每个线程维护一个KafkaConsumer或者采用线程池技术。代码示例
KafkaProducer是线程安全的,允许在多个线程中共享一个KafkaProducer实例
kafkaConsumer会创建3类tcp连接
1. 确定协调者,获取集群元数据
2. 连接协调者
3. 获取消息
消费者当前落后于生产者的程度:
Consumer Lag :kafka监控lag的层级是在分区上的,如果要计算topic粒度的滞后,则要把分区上的累加起来。
如果落后太多,会失去Zero Copy的优势,从而从磁盘上读取。另外,极端情况,落后超过了消息的保存时间(比如1周),则被删除了。
解决方法:
使用 Kafka 自带的命令行工具 kafka-consumer-groups 脚本。
使用 Kafka Java Consumer API 编程。
使用 Kafka 自带的 JMX 监控指标。