简单玩一下kafka
背景
这玩意(中间件)虽然常用,但还真没实际玩一玩,今天搞搞,看看基本玩法
简单理解一些概念
- brocker 一台kafka机器就是一个broker。一个集群包含多个broker。一个brocker包含多个topic
- 一个topic有多个分区partition。一个topic有消费者和生产者。
- Consumer消费者。多个消费者组成消费者组Consumer Group
- offset消费位移
安装
- 认准下面这两,才是官方镜像。confluentinc就认准这个就对了~~其他镜像不知道谁打包的
1
2docker pull confluentinc/cp-zookeeper
docker pull confluentinc/cp-kafka - 启动镜像咯
1
2
3
4
5
6//注意这样子启动,两个容器无法通信,需要先创建一个新的网络,然后run容器 --net=<network_name>才可以确保两个容器通信。为了简单后面直接docker-compose执行
docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=/172.20.224.159:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.20.224.159:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 confluentinc/cp-kafka
docker run -d --name zookeeper -e TZ="Asia/Shanghai" -p 2181:2181 -v $PWD/data:/data -e ZOOKEEPER_CLIENT_PORT=2181 confluentinc/cp-zookeeper - zookeeper启动解释
- -d:以分离模式运行容器,这意味着容器将在后台运行。
- –name zookeeper:为容器指定一个名称,以便以后可以更容易地引用它。
- -p 2181:2181:将容器的 2181 端口映射到宿主机的 2181 端口
- -e ZOOKEEPER_CLIENT_PORT=2181:设置环境变量 ZOOKEEPER_CLIENT_PORT 的值为 2181。这将告诉 Zookeeper 在 2181 端口上监听客户端连接。
- -e TZ=”Asia/Shanghai”设置时区
- -v $PWD/data:/data 将本地目录(文件)挂载到容器指定目录
- kafka启动解释
- -e KAFKA_BROKER_ID=0:设置环境变量 KAFKA_BROKER_ID 的值为 0。这将指定 Kafka broker 的 ID
- -e KAFKA_ZOOKEEPER_CONNECT=192.168.1.1:2181:设置环境变量 KAFKA_ZOOKEEPER_CONNECT 的值为 192.168.1.1:2181。这将指定 Kafka broker 连接的 Zookeeper 地址和端口
- -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.1:9092:设置环境变量 KAFKA_ADVERTISED_LISTENERS 的值为 PLAINTEXT://192.168.1.1:9092。这将指定 Kafka broker 对外宣布的监听地址和端口
直接docker compose吧,省事
1 |
|
1 |
|
先简单使用,再看怎么玩其他的
- 咱先进入kafka容器看看
docker exec -it xxxxx bash
1 |
|
- 看看怎么列出所有主题,然后做个简单创建和消费
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15//创建一个主题
kafka-topics --create --topic raintest --bootstrap-server localhost:9092
//查看主题
kafka-topics --list --bootstrap-server localhost:9092
//生产
kafka-console-producer --broker-list localhost:9092 --topic raintest
//消费
kafka-console-consumer --bootstrap-server localhost:9092 --topic raintest --from-beginning
//--from-beginning是一个命令行选项,用于指定消费者从主题的开始处开始消费消息
//查看组
kafka-consumer-groups --bootstrap-server localhost:9092 --list
//查看消费情况
kafka-consumer-groups --bootstrap-server localhost:9092 --group group111 --describe
//还有好多待补充,这里暂不细究了
其他发现
这个docker-compose.yaml用的最新版的kafka,设定了KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
,但是实际上最新版Kafka开始使用自我管理的Quorum代替ZooKeeper来管理元数据。这也意味着新版kafka不需要zookeeper作为必须了。因此查看容器日志发现会有链接失败的信息。但是我尝试创建主题和生产、消费主题并没有问题。而且命令中不需要--zookeeper
了。
https://cloud.tencent.com/developer/news/841740
https://www.confluent.io/blog/kafka-without-zookeeper-a-sneak-peek/
后续
回去https://hub.docker.com/r/confluentinc/cp-kafka 看看更详细的介绍
https://docs.confluent.io/platform/current/installation/docker/config-reference.html#confluent-ak-configuration
根据手册,提供了两种mode
1 |
|
本文不再细说。
kraft mode详细参考https://docs.confluent.io/platform/current/kafka-metadata/kraft.html#kraft-overview
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!