docker 安装kafka
安装zookpeeper
docker pull zookeeper # 如果下载超时使用docker search 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 zookeeper
如果报错
Failed to start thread "GC Thread#0" - pthread_create failed (EPERM) for attributes: stacksize: 1024k, guardsize: 4k, detached.
更换zookeeper版本,比如zookeeper:3.7.0
安装kafka
# -v /etc/localtime:/etc/localtime 容器使用开发机时间
docker pull 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=192.168.0.139/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.0.139: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.0.139:2181/kafka 配置zookeeper管理kafka的路径192.168.0.139:2181/kafka
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.0.139:9092 把kafka的地址端口注册给zookeeper,如果是远程访问要改成外网IP,类如Java程序访问出现无法连接。
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 配置kafka的监听端口
-v /etc/localtime:/etc/localtime 容器时间同步虚拟机的时间
验证是否可用
进入容器
docker exec -it kafka bash
# 进入kafka自带测试脚本目录, kafka_2.13-2.8.1为我的kafka,安装版本不同可以,根据情况修改
cd /opt/kafka_2.13-2.8.1/bin/
打开消费脚本
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test_topic
打开生产脚本发送消息,消费脚本能收到消息,说明配置成功
./kafka-console-producer.sh --broker-list localhost:9092 --topic test_topic
新建topic
kafka-topics.sh --create --zookeeper 192.168.31.251:2181/kafka --replication-factor 1 --partitions 12 --topic mytest
列出当前topic
kafka-topics.sh --list --zookeeper 192.168.31.251:2181/kafka
参数
参数名 | 作用 | 备注 |
---|---|---|
KAFKA_BROKER_ID | kafka唯一id,用来区分不同节点 | |
KAFKA_ZOOKEEPER_CONNECT | zookeepe连接地址 | |
KAFKA_ADVERTISED_LISTENERS | ||
KAFKA_LISTENERS | 配置kafka的监听端 |
报错解决
WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 3 : {sun=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)