Kafka多个broker 启动失败
大家都知道Kafka可以部署多个broker,在部署多台broker时,需要注意一个问题:broker id不能重复,否则会导致broker启动后因为broker id冲突而只能启动一个broker.
Ambari下的多个broker id
在HDP2.4之前,Ambari 环境下的Kafka broker id是由Ambari脚本管理,具体在 $AMBARI_KAFKA_DIR/kafka.py 中如下代码:
if effective_version is not None and effective_version != "" and compare_versions(effective_version, '2.2.0.0') >= 0 and compare_versions(effective_version, '2.3.0.0') < 0:
if len(params.kafka_hosts) > 0 and params.hostname in params.kafka_hosts:
brokerid = str(sorted(params.kafka_hosts).index(params.hostname))
kafka_server_config['broker.id'] = brokerid
Logger.info(format("Calculating broker.id as {brokerid}"))
在HDP2.4以后,Kafka的broker id是由部署时自动生成,并保存在文件kafka logs.dir/meta.properties 中,如:#Mon Jul 04 11:52:47 CST 2016 version=0 broker.id=1001
.
可能的问题
如果多次在同一个环境中使用Ambari 安装Kafka,如果旧的环境和文件夹没有清理干净,会造成新部署的Kafka文件meta.properties文件还是使用旧的环境的,从而导致在同一个集群中的不同broker具有不同的broker id,这样,具有相同broker id的broker只能启动一台。
因此,如果部署的kafka broker出现了上述的问题,用户可以检查meta.properties中的broker id是否有冲突,从而排查上述问题。