一、kafka架构:
参考文章:
(125条消息) Kafka的点对点模式、发布订阅模式、基础架构_godkzz的博客-CSDN博客_kafka发布订阅模式
(125条消息) Kafka原理及应用实践,用心看这篇就够了【重点】_sunnyday0426的博客-CSDN博客_kafka原理及应用
二、简单案例实践环境搭建
1、下载wurstmeister/zookeeper镜像:
docker pull wurstmeister/zookeeper
2、下载wurstmeister/kafka镜像
docker pull wurstmeister/kafka
二、docker实现kafka通信
1、创建wurstmeister/zookeeper镜像的容器zookeeper,端口映射为2181—>2181:
docker run -d --name zookeeper -p 2181:2181 wurstmeister/zookeeper
2、创建wurstmeister/kafka镜像的容器kafka01,
docker run --name kafka01 \
-p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=172.18.0.1:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.18.0.1:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-d wurstmeister/kafka# 参数说明,这里我zk和kafka在同一台机器上
# -e KAFKA_BROKER_ID=0 在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
# -e KAFKA_ZOOKEEPER_CONNECT=zk机IP:2181/kafka 配置zookeeper管理kafka的路径zk机IP:2181/kafka
# -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka机IP:9092 把kafka的地址端口注册给zookeeper
# -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 配置kafka的监听端口
3、docker ps -a查看运行中的容器
4、运行并测试
创建topic
# 进入容器bash
#-d(分离模式,在后台运行) -i(即使没有附加,也保持STDIN打开) -t(分配一个伪终端)
docker exec -it kafka01 bash
# 进入kafka下bin目录
cd /opt/kafka_2.13-2.8.1/bin
# 创建一个kafka topic,记得修改zk机IP,运行结果是 Created topic test01.
kafka-topics.sh --create --zookeeper zk机ip:2181 --replication-factor 1 --partitions 1 --topic test01
生产者生产消息、消费者接收消息
# 运行一个生产者生产消息,输够了之后用crtl+c解决即可重新进入bash
kafka-console-producer.sh --broker-list localhost:9092 --topic test01
#随便输入几个测试消息,即可观察producer和consumer端的消息变化,比如输入如下消息:
{"datas":[{"channel":"","metric":"temperature","producer":"ijinus","sn":"IJA0101-00002245","time":"1543207156000","value":"80"}],"ver":"1.0"}
# 运行一个消费者消费消息(另起一个终端)
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test01 --from-beginning
观察消息通信结果
三、docker-compose实现kafka通信
1、在某一个目录下,新建docker-compose.yml
version: '3'
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper01
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: 172.18.0.1
KAFKA_ZOOKEEPER_CONNECT: 172.18.0.1:2182
KAFKA_BROKER_ID: 1
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://172.18.0.1:9092
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
container_name: kafka01
tty: true
privileged: true
stdin_open: true
2、运行docker-compose.yml:
docker-compose -f docker-compose.yml up
3、通过compose建立容器kafka01和zookeeper之后,进行消息通信的测试和运行:
创建topic
# 进入容器bash
#-d(分离模式,在后台运行) -i(即使没有附加,也保持STDIN打开) -t(分配一个伪终端)
docker exec -it kafka01 bash
# 进入kafka下bin目录
cd /opt/kafka_2.13-2.8.1/bin
# 创建一个kafka topic,记得修改zk机IP,运行结果是 Created topic test01.
kafka-topics.sh --create --zookeeper zk机ip:2181 --replication-factor 1 --partitions 1 --topic test01
生产者生产消息、消费者接收消息
# 运行一个生产者生产消息,输够了之后用crtl+c解决即可重新进入bash
kafka-console-producer.sh --broker-list localhost:9092 --topic test01
#随便输入几个测试消息,即可观察producer和consumer端的消息变化,比如输入如下消息:
{"datas":[{"channel":"","metric":"temperature","producer":"ijinus","sn":"IJA0101-00002245","time":"1543207156000","value":"80"}],"ver":"1.0"}
# 运行一个消费者消费消息(另起一个终端)
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test01 --from-beginning
观察消息通信结果