启动kafka无反应_kafka consumer无法正常启动原因调查

生产环境三个服务分别消费kafka(version 1.1.0)不同topic里的日志分析结果,将其写入HBase,其中消费kafka使用的是consumer的subscribe API。服务稳定运行了几个月,某次因为HBase升级将其临时关闭,在重新启动过程中,诡异的问题发生了。

现象

三个服务中有一个可以正常启动,另外两个在启动过程中似乎卡在某个地方block住。打开info级别的日志,发现如下可疑信息

> 2018-12-28 16:58:22 WARN pool-1-thread-2 org.apache.kafka.clients.NetworkClient - [Consumer clientId=consumer-2, groupId=defy-rtlog-receiver-srcproxy] Connection to node -2 could not be established. Broker may not be available.

调整日志级别为debug,重新观察观察日志,发现服务不停打印如下信息

> Coordinator discovery failed, refreshing metadata

分析问题

从日志来看,服务中kafka consumer一直死循环寻找coordinator. 但coordinator是什么鬼?

话说源码之前了无秘密,翻下源码,可以从注释中可以看到GroupCoordinator角色的描述如下

即GroupCoordinator负责管理group的offset,每一个broker启动一个GroupCoordinator,负责管理一些consumer groups。

既然每一个broker都有一个GroupCoordinator,那么如何判断一个group归哪个GroupCoordinator来管呢?

这里涉及到kafka内部一个特殊的topic __consumer_offsets,其用于存储group的消费情况,默认有50个partition。

某一group消费情况要存在哪一个partition,通过以下方式得到def partitionFor(groupId: String): Int = Utils.abs(groupId.hashCode) % groupMetadataTopicPartitionCount

计算得到的partition的leader所在的Broker即为该group

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值