记录Windows环境使用docker安装最新版kafka4.0.0,以及遇到的一些坑。

kafka3.3开始移除了对zookeeper的依赖,改为KRaft共识协议,自己管理元数据,简化了架构

前些年使用的wurstmeister/kafka镜像已不再维护,最近更新的版本为2.8.1,比较旧了。

现在可直接使用官方进行安装

docker安装kafka

拉取镜像

docker pull apache/kafka:4.0.0

安装镜像

docker run -d --name my_kafka -p 9092:9092 -p 9093:9093 ^
--env CLUSTER_ID=5L6g3nShT-eMCtK--X86sw ^
--env KAFKA_PROCESS_ROLES=broker,controller ^
--env KAFKA_NODE_ID=1 ^
--env KAFKA_CONTROLLER_QUORUM_VOTERS=1@host.docker.internal:9093 ^
--env KAFKA_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 ^
--env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://host.docker.internal:9092 ^
--env KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT ^
--env KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER ^
--env KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT ^
--env KAFKA_AUTO_CREATE_TOPICS_ENABLE=true ^
--env KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 ^
--env KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1 ^
--env KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1 ^
apache/kafka:4.0.0

docker安装kafka-ui

docker run -d --name my_kafka_ui -p 8089:8080 ^
  -e KAFKA_CLUSTERS_0_NAME=local ^
  -e KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=host.docker.internal:9092 ^
  provectuslabs/kafka-ui

访问http://localhost:8089/

遇到的坑

springboot集成kafka后,生产者可正常发消息,消费者无法消费

查看docker中kafka持续在打印日志:

INFO Sent auto-creation request for Set(__consumer_offsets) to the active controller. (kafka.server.DefaultAutoTopicCreationManager)

INFO Sent auto-creation request for Set(__consumer_offsets) to the active controller. (kafka.server.DefaultAutoTopicCreationManager)

KRaft模式需要显示设置内部主题副本数KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR,单节点必须设置为1,否则默认3导致创建失败

--env KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1

类似的需要设置

--env KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1 ^
--env KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1 ^

否则事务消息发送异常

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐