kafka版本:2.4.0 scala版本:2.12
配置
添加环境变量,每台服务器都需修改
# vi /etc/profile
修改配置文件,每台服务器都需修改
# vi /usr/local/kafka_2.12-2.4.0/config/server.properties
// 修改下方配置
// 1 节点值
broker.id=1 // 不同机器取值不同,cluster1是1,cluster2是2
// 2 日志路径
log.dirs=/home/hadoop_files/hadoop_logs/kafka
// 3 zookeeper 集群地址
zookeeper.connect=cluster1:2181,cluster2:2181,cluster3:2181
// 4 监听设置对应机器的ip地址
advertised.listeners=PLAINTEXT://172.31.42.166:9092
//hostname和端口是用来建议给生产者和消费者使用的,如果没有设置,将会使用listeners的配置,
//如果listeners也没有配置,将使用java.net.InetAddress.getCanonicalHostName()来获取
//这个hostname和port.
保存退出,更新环境配置
#source /etc/profile
在所有服务器上创建文件夹并修改文件权限
# mkdir -p /home/hadoop_files/hadoop_logs/kafka
# chown -R hadoop:hadoop /home/hadoop_files
# chown -R hadoop:hadoop /usr/local/kafka_2.12-2.4.0
复制分发文件夹
# scp -r /usr/local/kafka_2.12-2.4.0 cluster2:/usr/local/
# scp -r /usr/local/kafka_2.12-2.4.0 cluster3:/usr/local/
修改其他服务器上的配置项
测试与问题
在hadoop用户下启动kafka之前先保证zookeeper启动。
在所有服务器上执行kafka启动命令:
$ kafka-server-start.sh /usr/local/kafka_2.12-2.4.0/config/server.properties & //启动后回车
1.创建topic
2.查看topic
3.查看topic详细信息
4.发送接收
在cluster1上创建生产者会话
$ kafka-console-producer.sh --broker-list localhost:9092 --topic mykafka
在cluster1上输入“hello kafka”
在cluster2上创建消费者会话
$ kafka-console-consumer.sh --bootstrap-server cluster1:2181,cluster2:2181,cluster3:2181 --topic mykafka --from beginning
出错:消费者无法消费数据
解决:由于配置了advertised.listeners,每个消费者只能从各自的监听端口监听数据,cluster2的消费者命令为
$ kafka-console-consumer.sh --bootstrap-server cluster2:9092 --topic mykafka --from-beginning
cluster2成功消费:
按ctrl+c退出会话。
出错:关闭kafka命令出错,No kafka server to stop
[hadoop@cluster3 local]$ kafka-server-stop.sh
No kafka server to stop
[hadoop@cluster3 local]$
解决:修改kafka-server-stop.sh,将
PIDS=$(ps ax | grep -i 'kafka.Kafka' | grep java | grep -v grep | awk '{print $1}')
替换为
PIDS=$(jps -lm | grep -i 'kafka.Kafka'| awk '{print $1}')