Kafka 单节点 KRaft 模式部署与测试
1. 拉取 Kafka 镜像(可能需要科学上网)
docker pull bitnami/kafka
2. 启动 Kafka(单节点 KRaft 模式)
docker run -d --name kafka \
-p 9092:9092 \
-e KAFKA_NODE_ID=1 \
-e KAFKA_KRAFT_MODE=true \
-e KAFKA_LISTENERS=PLAINTEXT://:9092 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 \
-e KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER \
-e KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \
-e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 \
-e KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1 \
-e KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1 \
bitnami/kafka
解释
docker run -d --name kafka
:在后台运行一个名为 kafka 的容器。-p 9092:9092
:将主机的9092端口映射到容器的9092端口,用于客户端连接 Kafka。-e KAFKA_NODE_ID=1
:设置 Kafka broker 的节点 ID,在单节点设置中可任意指定。-e KAFKA_KRAFT_MODE=true
:启用 KRaft 模式,不再使用 Zookeeper。-e KAFKA_LISTENERS=PLAINTEXT://:9092
:配置 Kafka 监听的接口和端口。-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092
:设置 Kafka broker 向客户端广告的地址。-e KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER
:指定 Kafka 的控制器监听名称。-e KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
:映射不同监听器的安全协议。-e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1
:设置内置主题的副本因子。-e KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1
:设置事务状态日志的最小 ISR。-e KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1
:设置事务状态日志的副本因子。
3. 进入 Kafka 容器
docker exec -it kafka /bin/bash
4. 创建测试主题并测试消息发送与接收
4.1 创建测试主题
在 Kafka 容器中,运行以下命令创建一个名为 test
的测试主题:
kafka-topics.sh --create --topic test --partitions 1 --replication-factor 1 --bootstrap-server localhost:9092
解释
kafka-topics.sh
:Kafka 的主题管理工具。--create
:表示创建新主题。--topic test
:指定主题名称为test
。--partitions 1
:设置主题分区数量为 1。--replication-factor 1
:设置主题副本数量为 1。--bootstrap-server localhost:9092
:指定 Kafka broker 的地址和端口。
4.2 创建生产者并发送消息
执行以下命令启动控制台生产者,并发送消息到 test
主题:
kafka-console-producer.sh --broker-list localhost:9092 --topic test
解释
kafka-console-producer.sh
:Kafka 的控制台生产者工具。--broker-list localhost:9092
:指定 Kafka broker 的地址和端口。--topic test
:指定发送消息的目标主题。
4.3 创建消费者并接收消息
在另一个终端窗口中,执行以下命令启动控制台消费者,并接收 test
主题的消息:
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
解释
kafka-console-consumer.sh
:Kafka 的控制台消费者工具。--bootstrap-server localhost:9092
:指定 Kafka broker 的地址和端口。--topic test
:指定要消费消息的 Kafka 主题。--from-beginning
:从主题的起始位置开始消费所有消息。