Linux环境Docker中搭建Kafka

公司某个数据项目要利用Kafka做数据分发,所以整理了下在centos中利用docker搭建kafka的步骤,根据步骤操作半小时内就能搭建完成~

一、搭建zookeeper环境


1)docker pull wurstmeister/zookeeper	# 拉取zookeeper镜像
2)docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2  --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper	# 创建zookeeper容器

二、创建kafka环境

1)docker pull wurstmeister/kafka
2)docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.244.132/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.244.132:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime wurstmeister/kafka
 
参数说明:
-e KAFKA_BROKER_ID=0  在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
 
-e KAFKA_ZOOKEEPER_CONNECT=192.168.244.132:2181/kafka 配置zookeeper管理kafka的路径172.16.0.13:2181/kafka
 
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.244.132:9092  把kafka的地址端口注册给zookeeper,如果是远程访问要改成外网IP,类如Java程序访问出现无法连接。
 
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 配置kafka的监听端口
 
-v /etc/localtime:/etc/localtime 容器时间同步虚拟机的时间
 
5、验证kafka是否可以使用
 
5.1、进入容器
$ docker exec -it kafka bash
 
5.2、进入 /opt/kafka_2.12-2.3.0/bin/ 目录下
$ cd /opt/kafka_2.12-2.3.0/bin/
 
5.3、运行kafka生产者发送消息
$ ./kafka-console-producer.sh --broker-list localhost:9092 --topic sun
 
发送消息
> {"datas":[{"channel":"","metric":"temperature","producer":"ijinus","sn":"IJA0101-00002245","time":"1543207156000","value":"80"}],"ver":"1.0"}
 
5.4、运行kafka消费者接收消息
$ ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic sun --from-beginning
1、fafka启动后,通过docker exec -it kafka bash进入后,不一会儿,自动退出来了。
【问题原因】启动容器设置了--restart=always,通过日志发现启动失败,一直在重启。并指向host不可达。
image.png
【解决方案】关闭防火墙
systemctl stop firewalld
2、关闭防火墙后重启container失败
docker start 8dfac2df549c
Error response from daemon: driver failed programming external connectivity on endpoint kafka (2bb0b0d19ea751146218f99d3f496db714dd0bc19105663b71fc56f65ebb0592): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9092 -j DNAT --to-destination 172.17.0.3:9092 ! -i docker0: iptables: No chain/target/match by that name
 
【问题原因】关闭防火墙可能会清空iptables表,需要重建
【解决方案】重启docker

三、验证kafka是否正确安装

进入到kafka容器中 并创建topic 生产者,执行如下命令:

1)docker exec -it kafka bash
2)cd /opt/kafka_2.11-2.0.0/bin/
3)./kafka-topics.sh --create --zookeeper 自己服务器IP:2181/kafka --replication-factor 1 --partitions 1 --topic mykafka
4)./kafka-console-producer.sh --broker-list 自己服务器IP:9092 --topic mykafka

执行上诉命令后,另起一个标签页,执行如下命令 创建kafka消费者消费消息:

1)docker exec -it kafka bash
2)cd /opt/kafka_2.11-2.0.0/bin/
3)./kafka-console-consumer.sh --bootstrap-server 自己服务器IP:9092 --topic test --from-beginning

执行完上诉命令后,在生产者窗口中 输入任意内容回车,即可在消费者的窗口查看到消息

四、安装kafka可视化管理软件Kafka Tool

下载地址
http://www.kafkatool.com/download.html

Linux环境Docker中搭建Kafka_第1张图片
下载下来后,一键安装即可。

另有web可视化平台:kafka-manager、kafka-ui-lite

你可能感兴趣的:(kafka,kafka,docker,linux)