Docker安装mysql EFAK监控面板会用到
EFAK监控面板
容器安装
1、kafka需要zookeeper管理,所以需要先安装zookeeper。 (PS:2.8版本以后kafka-Kraft 模式不再依赖zk,目前别的很多组件都依赖zk注册,所以还是以zk举例)
2、下载zookeeper镜像
$ docker pull wurstmeister/zookeeper $ docker pull wurstmeister/kafka
启动zk镜像生成容器
docker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper $ 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
启动kafka镜像生成容器
## docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=172.16.0.13:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.16.0.13:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime wurstmeister/kafka $ 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=172.16.0.13:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.16.0.13: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=172.16.0.13:2181/kafka 配置zookeeper管理kafka的路径172.16.0.13:2181/kafka
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.16.0.13:9092 把kafka的地址端口注册给zookeeper,如果是远程访问要改成外网IP,类如Java程序访问出现无法连接。
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 配置kafka的监听端口
-v /etc/localtime:/etc/localtime 容器时间同步虚拟机的时间
3、验证kafka是否可以使用
$ docker exec -it kafka bash
进入 /opt/kafka_2.12-2.3.0/bin/ 目录下
$ cd /opt/kafka_2.12-2.3.0/bin/
运行kafka生产者发送消息
$ ./kafka-console-producer.sh --broker-list localhost:9092 --topic sun
发送消息
> hello world
运行kafka消费者接收消息
$ ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic sun --from-beginning
docker-compose
新建 /opt/mydocker/docker-compose.yml
version: "2" services: #服务名,也可自定义 zookeeper: image: wurstmeister/zookeeper container_name: zookeeper ports: - "2181:2181" kafka: image: wurstmeister/kafka container_name: kafka expose: - "9999" ports: - "9092:9092" - "9999:9999" environment: KAFKA_ADVERTISED_HOST_NAME: 192.168.233.129 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 JMX_PORT: 9999 #启用远程JMX 监控面板用 volumes: - /var/run/docker.sock:/var/run/docker.sock
docker-compose config -q # 检查配置,有问题才有输出,进入docker-compose.yml文件目录执行 docker-compose up -d # 启动所有docker-compose服务并后台运行 docker ps # 查看容器
zookeeper查看节点
进入容器
docker exec -it 容器id或容器name bash cd bin ./zkCli.sh ls /
查看kafka集群节点
ls /brokers/ids ls /brokers/topics
安装EFAK
EFAK V2.0.7 将 Kafka-Eagle 重命名为 EFAK(Eagle For Apache Kafka)
tar -zxvf kafka-eagle-bin-2.0.7.tar.gz tar -zxvf efak-web-2.0.7-bin.tar.gz -C /opt/module/ mv efak-web-2.0.7/ efak
修改配置文件 /opt/module/efak/conf/system-config.properties
设置标签
# 第一处 efak.zk.cluster.alias=cluster1 cluster1.zk.list=192.168.233.129:2181 # 第二处 ###################################### # kafka offset storage cluster1.efak.offset.storage=kafka # cluster2.efak.offset.storage=zk # 第三处 ###################################### # kafka sqlite jdbc driver address ###################################### # sqlite 和 mysql 都可以 ###################################### # kafka mysql jdbc driver address ###################################### efak.driver=com.mysql.cj.jdbc.Driver efak.url=jdbc:mysql://192.168.233.129:3306/ke?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull efak.username=root efak.password=123456
添加环境变量
sudo vim /etc/profile.d/my_env.sh # kafkaEFAK export KE_HOME=/opt/module/efak export PATH=$PATH:$KE_HOME/bin
source /etc/profile
先启动zk和kafka
# 启动kafka-eagle bin/ke.sh start
记得开放端口
#查看进程,启动失败控制台不会报错,只能去看日志 ps -ef|grep efak
遇到情况:内存不足。最少2个G内存
容器编排启动时,Kafka命令行操作报错
进入/opt/kafka_2.13-2.8.1/bin
加一句
ISKAFKASERVER="false" if [[ "$*" =~ "kafka.Kafka" ]]; then ISKAFKASERVER="true" fi
改动这一行
if [ $JMX_PORT ] && [ -z "$ISKAFKASERVER" ]; then