問題:Ambari下Kafka多IP監聽配置
環境:Ambari 1.7.0 , Hadoop 2.2 Kafka 0.8.1.2.2.0.0
現象:
Ambari 中是不能配置Kafka的host.name配置項的,Ambari配置時,使用Ambar中為節點指定的hostname值,比如node1.google (Kafka自身的默認值是localhost)
一般在內網配置Ambari,用的hostname都是內網的IP,如 192.168.1.1 node1.google 192.168.1.2 node2.google 。這樣導致Kafka啟動時只監聽192.168.1.x的IP。
雖然Ambari中可以有Custom kafka-broker,可以自定義選項,但是對host.name配置項是不起作用的,因為Ambari配置Kafka的host.name時根本不讀這些用戶輸入的配置。
代碼:
參見 git下目錄(ambari-server/src/main/resources/common-services/KAFKA/0.8.1.2.2/package/scripts)中的kafka.py 和 params.py 兩個文件
可以看到首先是 params.py 讀配置,然后kafka.py 根據配置寫到Kafka的配置文件中去。
關鍵代碼:
params.py
conf_dir = "/etc/kafka/conf" kafka_user = config['configurations']['kafka-env']['kafka_user'] kafka_log_dir = config['configurations']['kafka-env']['kafka_log_dir'] kafka_pid_dir = status_params.kafka_pid_dir kafka_pid_file = kafka_pid_dir+"/kafka.pid" hostname = config['hostname']
kafka.py
kafka_server_config = mutable_config_dict(params.config['configurations']['kafka-broker'])
kafka_server_config['broker.id'] = brokerid
kafka_server_config['host.name'] = params.hostname
kafka_server_config['kafka.metrics.reporters'] = params.kafka_metrics_reporters
解決:
根據kafka的文檔,要是不配置host.name則默認監聽0.0.0.0,所以我們只要在 kafka.py 中加入 del kafka_server_config['host.name'] 這句即可,注意要在Ambari-server主機上改,然后把該文件同步到Kafka的節點
上述環境下kafka.py所在目錄是:/var/lib/ambari-agent/cache/stacks/HDP/2.2/services/KAFKA/package/scripts
配置好后,在Ambari上重啟Kafka即可
Happy end。。。。
