基于docker的kafka3.0集群配置(Kraft模式)

`简介`
Kafka3.0之前的架构:元数据在zookeeper中,运行时动态选举controller,由controller进行Kafka集群管理。
kraft模式架构:不再依赖zookeeper集群,而是用三台controller节点代替zookeeper,元数据保存在 controller中,
由controller直接进行Kafka集群管理。
`kraft架构的优势`
1、Kafka不再依赖外部框架,而是能够独立运行。
2、controller管理集群时,不再需要从zookeeper中先读取数据,集群性能上升。
3、由于不依赖zookeeper,集群扩展时不再受到zookeeper读写能力限制controller 不再动态选举,而是由配置文件规定。
这样我们可以有针对性的加强controller 节点的配置。
4、后续版本升级方便,不用和zookeeper一起维护。

1、环境描述

kafka1                        172.18.62.11                      jdk8、Kafka 
kafka2                        172.18.62.12                      jdk8、Kafka 
kafka3                        172.18.62.13                      jdk8、Kafka   

2、启动容器

dvr start kafka-1
dvr start kafka-2
dvr start kafka-3
docker ps

容器启动
3、下载安装包(截至目前最新kafka_2.13-3.2.1)

wget https://dlcdn.apache.org/kafka/3.2.1/kafka_2.13-3.2.1.tgz

4、解压安装包

tar xvf kafka_2.13-3.2.1.tgz

5、配置集群

vim /config/kraft/server.properties
kafka-1:

process.roles=broker, controller
#节点 ID
node.id=1
#controller 服务协议别名
controller.listener.names=CONTROLLER
#全 Controller 列表
controller.quorum.voters=controller.quorum.voters=1@172.18.62.11:9093,2@172.18.62.12:9093,3@172.18.62.13:9093
#不同服务器绑定的端口
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
#broker 服务协议别名
inter.broker.listener.name=PLAINTEXT
#broker 对外暴露的地址
advertised.Listeners=PLAINTEXT://172.18.62.11:9092
#协议别名到安全协议的映射
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
#kafka 数据存储目录
log.dirs=/tmp/kraft-combined-logs
kafka-2:

process.roles=broker, controller
#节点 ID
node.id=2
#controller 服务协议别名
controller.listener.names=CONTROLLER
#全 Controller 列表
controller.quorum.voters=controller.quorum.voters=1@172.18.62.11:9093,2@172.18.62.12:9093,3@172.18.62.13:9093
#不同服务器绑定的端口
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
#broker 服务协议别名
inter.broker.listener.name=PLAINTEXT
#broker 对外暴露的地址
advertised.Listeners=PLAINTEXT://172.18.62.12:9092
#协议别名到安全协议的映射
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
#kafka 数据存储目录
log.dirs=/tmp/kraft-combined-logs
kafka-3:

process.roles=broker, controller
#节点 ID
node.id=3
#controller 服务协议别名
controller.listener.names=CONTROLLER
#全 Controller 列表
controller.quorum.voters=controller.quorum.voters=1@172.18.62.11:9093,2@172.18.62.12:9093,3@172.18.62.13:9093
#不同服务器绑定的端口
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
#broker 服务协议别名
inter.broker.listener.name=PLAINTEXT
#broker 对外暴露的地址
advertised.Listeners=PLAINTEXT://172.18.62.13:9092
#协议别名到安全协议的映射
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
#kafka 数据存储目录
log.dirs=/tmp/kraft-combined-logs
注:根据具体需求修改相应的IP和node.id即可

6、安装jdk8

#安装
apt-get install openjdk-8-jdk
#查看版本
jave -version

7、启动kafka服务

#分别启动三台服务,日志目录自定义即可
bin/kafka-server-start.sh config/kraft/server.properties >>/var/log/kafka.log &

8、测试

#创建topic
bin/kafka-topics.sh --create  --bootstrap-server 172.18.62.11:9092,172.18.62.12:9092,172.18.62.13:9092 --replication-factor 3 --partitions 3 --topic test

创建topic

#查看topic
bin/kafka-topics.sh --list  --bootstrap-server 172.18.62.11:9092,172.18.62.12:9092,172.18.62.13:9092

在这里插入图片描述

#生产
bin/kafka-console-producer.sh --bootstrap-server 172.18.62.11:9092,172.18.62.12:9092,172.18.62.13:9092 --topic test
#消费
bin/kafka-console-consumer.sh --bootstrap-server 172.18.62.11:9092,172.18.62.12:9092,172.18.62.13:9092 --topic test

生产
消费
消费

### 使用Docker安装Kafka 3.0教程 #### 准备工作 确保已安装 Docker 并能够正常运行容器。对于 Kafka 版本 3.0 及以上,在某些部署场景下不再强制依赖 ZooKeeper,引入了 KRaft (Kafka Raft MetaData) 模式来替代传统的 ZooKeeper 协调机制[^3]。 #### 配置环境 创建一个新的项目文件夹用于存放所有的配置文件和服务定义: ```bash mkdir kafka-docker && cd kafka-docker ``` #### 编写 `docker-compose.yml` 文件 为了简化操作流程,可以利用 `docker-compose` 工具一次性启动多个服务实例。下面是一个适用于 Kafka 3.0 的基础版 `docker-compose.yml` 文件示例,这里假设采用的是 Kraft 模式而非传统ZooKeeper模式: ```yaml version: &#39;3&#39; services: broker-1: image: confluentinc/cp-kafka:7.2.0 # 确认此版本支持Kafka 3.0及以上特性 hostname: broker-1 ports: - "9092:9092" environment: KAFKA_NODE_ID: 1 KAFKA_PROCESS_ROLES: controller,broker KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_LISTENERS: PLAINTEXT://broker-1:29092,CONTROLLER://broker-1:9093 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092 KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT KAFKA_LOG_DIRS: /var/lib/kafka/data KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 KAFKA_JMX_PORT: 9101 KAFKA_METRIC_REPORTERS: io.confluent.metrics.reporter.ConfluentMetricsReporter KAFKA_CONFLUENT_LICENSE_topic.replication.factor: 1 KAFKA_CONFLUENT_BALANCER_ENABLE: false KAFKA_AUTO_CREATE_TOPICS_ENABLE: true volumes: - ./data/broker-1:/var/lib/kafka/data ``` 上述配置中指定了单节点Broker作为controller角色,并开放必要的端口以便外部访问。注意调整 `image:` 字段中的镜像标签以匹配最新的稳定发行版[^4]。 #### 启动服务 保存好 `docker-compose.yml` 文件之后,在命令行执行如下指令即可初始化并启动整个集群: ```bash docker-compose up -d ``` 这将会以后台守护进程的方式启动所有指定的服务组件。可以通过 `docker ps` 查看当前正在运行的容器状态;也可以通过 `docker logs <container_name>` 来查看特定容器的日志输出情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值