1、拉取镜像
// 拉取 kafka 镜像 docker pull wurstmeister/kafka // 拉取 zookeeper 镜像 docker pull zookeeper
2、运行zookeeper
docker run -d --name zookeeper -p 2181:2181 -t zookeeper
3、运行kafka
注意:192.168.124.11 为宿主机ip
kafka0:
docker run -d --name kafka0 -p 9092:9092 -e kafka_broker_id=0 -e kafka_zookeeper_connect=192.168.124.11:2181 -e kafka_advertised_listeners=plaintext://192.168.124.11:9092 -e kafka_listeners=plaintext://0.0.0.0:9092 -t wurstmeister/kafka
kafka1:
docker run -d --name kafka1 -p 9093:9093 -e kafka_broker_id=1 -e kafka_zookeeper_connect=192.168.124.11:2181 -e kafka_advertised_listeners=plaintext://192.168.124.11:9093 -e kafka_listeners=plaintext://0.0.0.0:9093 -t wurstmeister/kafka
kafka2:
docker run -d --name kafka2 -p 9094:9094 -e kafka_broker_id=2 -e kafka_zookeeper_connect=192.168.124.11:2181 -e kafka_advertised_listeners=plaintext://192.168.124.11:9094 -e kafka_listeners=plaintext://0.0.0.0:9094 -t wurstmeister/kafka
参数说明:
- -e kafka_broker_id=0 在kafka集群中,每个kafka都有一个broker_id来区分自己
- -e kafka_zookeeper_connect=192.168.124.11:2181/kafka 配置zookeeper管理kafka的路径192.168.124.11:2181/kafka
- -e kafka_advertised_listeners=plaintext://192.168.124.11:9092 把kafka的地址端口注册给zookeeper,如果是远程访问要改成外网ip。
- -e kafka_listeners=plaintext://0.0.0.0:9092 配置kafka的监听端口:这个不能改-v /etc/localtime:/etc/localtime 容器时间同步虚拟机的时间
4、设置topic
进入kafka0:
docker exec -it kafka0 /bin/bash
进入bin目录:
cd /opt/kafka_2.13-2.8.1/bin
创建topic:
kafka-topics.sh --create --zookeeper 192.168.124.11:2181 --replication-factor 3 --partitions 5 --topic testtopic
查看topic:
// 查看指定 topic kafka-topics.sh --zookeeper 192.168.124.11:2181 --topic testtopic --describe // 查看 topic 集合 kafka-topics.sh --zookeeper 192.168.124.11:2181 --list
kafka的topic所有分区会分散在不同broker上,所以该topic的5个分区会被分散到3个broker上,其中有两个broker得到两个分区,另一个broker只有1个分区,如图所示:
集群节点说明:
- topic: testtopic partitioncount: 5 replicationfactor:3 代表testtopic有5个分区,3个副本节点;
- topic: 代表主题名称
- leader代表主题节点号,
- replicas代表他的副本节点有broker.id = 2、0、1(包括leader replica和follower replica,且不管是否存活),
- isr表示存活并且同步leader节点的副本有broker.id = 2、0、1
5、进行生产者和消费者测试
分别在broker0上运行一个生产者,broker1、2上分别运行一个消费者:
kafka-console-producer.sh --broker-list 192.168.124.11:9092 --topic testtopic kafka-console-consumer.sh --bootstrap-server 192.168.124.11:9093 --topic testtopic --from-beginning kafka-console-consumer.sh --bootstrap-server 192.168.124.11:9094 --topic testtopic --from-beginning
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论