Docker部署Kafka Native

Kafka是一种消息分发系统,它由Linkedin公司开发并开源,采用Apache-2.0开源协议,现由Apache基金会进行管理。因其高吞吐量、低延迟、可扩展性和可靠性,被广泛用于大规模消息分发和实时流处理场景。目前最新版本为4.0,这与之前在架构方面发生较大的变化,Kafka的4.0版本已完全移除对zookeeper的依赖,转而使用kRaft(Kafka Raft Metadata Mode)来实现集群共识协议和元数据管理。从而简化了Kafka架构的复杂度,因此集群的部署和运维复杂度也显著降低。

与传统 Kafka 的区别kafka native 对比传统依赖JVM的kafka,其区别如下表所示

特性对比:传统 Kafka 与 Kafka Native

特性 传统 Kafka Kafka Native
运行环境 基于 JVM(Java 虚拟机) 原生二进制文件(GraalVM 编译)
启动速度 启动较慢(需初始化 JVM) 启动极快(无需 JVM 初始化)
资源消耗 内存占用高(JVM 开销) 内存占用低(原生编译消除 JVM 开销)
性能 依赖 JVM 的即时编译(JIT)优化 AOT 编译直接优化代码路径,减少运行时开销
部署方式 依赖 JVM 环境(Docker 镜像含 JVM) 原生二进制文件直接部署,更适合轻量化场景
适用场景 通用场景(如大数据处理、流式计算) 微服务、云原生、边缘计算等对资源敏感的场景

部署命令

bash 复制代码
# 拉取镜像
sudo docker pull apache/kafka-native:latest
或者x86
sudo docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/kafka-native:latest
ARM架构的
```bash
sudo docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_kafka-native:latest

创建容器并运行

sudo docker run -d

-p 9092:9092

--name=kafka

-e CLUSTER_ID=4L6g3nShT-eMCtK--X86sw

-e KAFKA_NODE_ID=1

-e KAFKA_PROCESS_ROLES=broker,controller

-e KAFKA_LISTENERS=CONTROLLER://:29093,PLAINTEXT_HOST://:9092,PLAINTEXT://:19092

-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT_HOST://172.16.17.110:9092,PLAINTEXT://kafka:19092

-e KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER

-e KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT

-e KAFKA_CONTROLLER_QUORUM_VOTERS=1@kafka:29093

-e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1

-e KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1

-e KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1

-e KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS=0

-e KAFKA_NUM_PARTITIONS=1

registry.cn-hangzhou.aliyuncs.com/qiluo-images/kafka-native:latest

复制代码
如果你使用docker-compose来管理容器,那么创建docker-compose.yaml文件内容如下:

```bash
services:
  kafka:
    container_name:kafka
    image:registry.cn-hangzhou.aliyuncs.com/qiluo-images/kafka-native:latest
    ports:
      -"9092:9092"
    environment:
      -LANG=C.UTF-8
      # KRaft settings
      # 集群ID,可以自定义任何字符串作为集群ID,同一个集群中所有节点的集群ID必须配置为一样
      -CLUSTER_ID=4L6g3nShT-eMCtK--X86sw
      -KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      #  节点ID,用于标识每个集群中的节点,需要是不小于1的整数,同一个集群中的节点ID不可重复
      -KAFKA_NODE_ID=1
      # 节点类型,broker,controller表示该节点是混合节点,通常单机部署时需要配置为混合节点
      -KAFKA_PROCESS_ROLES=broker,controller
      # 投票节点列表,通常配置为集群中所有的Controller节点,格式为节点id@节点外网地址:节点Controller端口,多个节点使用逗号,隔开
      -KAFKA_CONTROLLER_QUORUM_VOTERS=1@kafka:29093
      # Listeners
      # Kafka的Broker地址前缀名称,固定为PLAINTEXT即可
      -KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT
      # Kafka的Controller地址前缀名称,固定为CONTROLLER即可
      -KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER
      #  表示Kafka要监听哪些端口,PLAINTEXT://:9092,CONTROLLER://:9093表示本节点作为混合节点,监听本机所有可用网卡的9092和9093端口,其中9092作为客户端通信端口,9093作为控制器端口
      -KAFKA_LISTENERS=CONTROLLER://:29093,PLAINTEXT_HOST://:9092,PLAINTEXT://:19092
      # Kafka的外网地址,需要是PLAINTEXT://外网地址:端口的形式,当客户端连接Kafka服务端时,Kafka会将这个外网地址广播给客户端
      -KAFKA_ADVERTISED_LISTENERS=PLAINTEXT_HOST://172.16.17.110:9092,PLAINTEXT://kafka:19092
      # 主题的副本数,默认为3,单节点时更改为1即可
      -KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1
      # 允许消费者组在首次加入新成员时延迟触发 Rebalance(重新分配分区),默认值为 3000ms(3秒),此处设置为 0ms,表示取消延迟,立即触发 Rebalance
      -KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS=0
      # 事务日志的最小同步副本数,默认值为 1,此处设置为 1,表示只要有一个副本确认写入,事务即可提交
      -KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1
      # 事务日志主题的副本数,默认值为 3,此处设置为 1,表示事务日志只存储在一个副本中
      -KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1
      # 共享协调器状态主题的副本数,默认值为 3,此处设置为 1,表示该主题只存储在一个副本中
      -KAFKA_SHARE_COORDINATOR_STATE_TOPIC_REPLICATION_FACTOR=1
      # 共享协调器状态主题的最小同步副本数,默认值为 1,此处设置为 1,表示只要有一个副本确认写入,操作即可成功
      - KAFKA_SHARE_COORDINATOR_STATE_TOPIC_MIN_ISR=1

然后,执行以下命令启动容器

bash 复制代码
sudo docker-compose -f docker-composer.yaml up -d

检查容器

bash 复制代码
sudo docker ps

容器创建成功之后,就可以连接测试了,这里推荐一款可视化的连接工具kafka-king,这是一个用go语言实现的kafka ui客户端,开源免费。支持集群、topic、生产者和消费者创建与管理。

kafka-king客户端工具:https://github.com/Bronya0/Kafka-King

kafka-native Dockerhub:https://hub.docker.com/r/apache/kafka-native

Docker国内镜像站:https://docker.aityp.com

kafka官方文档:https://kafka.apache.org/documentation/#docker

相关推荐
caibixyy3 小时前
Spring Boot整合Kafka:解决消息挤压、丢失与重复消费
kafka
可爱的小小小狼4 小时前
k8s中的kubelet
容器·kubernetes·kubelet
z_y_j2299704385 小时前
服务器中使用Docker部署前端项目
服务器·前端·docker·容器
疯癫的老码农5 小时前
【小白入门docker】创建Spring Boot Hello World应用制作Docker镜像并运行
java·spring boot·分布式·docker·微服务
小刘不想改BUG5 小时前
Docker 部署微服务项目详细步骤
docker·微服务·容器
橄榄熊6 小时前
Docker MySQL 使用全流程
mysql·docker·容器
邂逅星河浪漫7 小时前
【DockerFile+Nginx+DockerCompose】前后端分离式项目部署(docker容器化方式)
nginx·docker·centos·部署·docker-compose·dockerfile·容器化部署
野熊佩骑7 小时前
CentOS二进制安装包方式部署K8S集群之系统初始化
运维·docker·微服务·云原生·容器·kubernetes·centos
小闫BI设源码7 小时前
Kubernetes 集群高可用
云原生·容器·kubernetes·滚动更新·operator模式·helm包管理·ci/cd集成