前言
如果您以为有用的话,记得给博主点个赞,批评,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人天天的运气都不会太差,着实白嫖的话,那接待常来啊!!!
kafka 3.7.0 先容,并以KRaft 模式举行docker构建镜像、运行
kafka 采用 3.7.0 版本;
jdk 采用 LTS JDK 8(长期支持8版本);
并以KRaft 模式启动。
注:kafka 3.7.0 版本不再必须依赖 Zookeeper。
KRaft 模式是 Kafka 从 2.8.0 版本引入的特性,允许 Kafka 集群在没有 Zookeeper 的情况下运行。
1. Kafka 3.7.0 主要新增特性
- 去除对 Zookeeper 的依赖 (KRaft 模式加强) Kafka 3.7.0 继续推动 KRaft (Kafka Raft) 模式,即去除 Zookeeper 的模式。在 Kafka 2.8.0 版本中已经引入了 KRaft 模式的实验性支持,Kafka 3.7.0 进一步加强了这个模式的稳定性,并且鼓励用户利用 KRaft 模式。
- 在 KRaft 模式下,Kafka 集群的元数据管理和协调工作由 Kafka 自身的 Raft 协议来完成,而不再依赖 Zookeeper。
- KRaft 模式支持独立的 Kafka 集群管理和自我协调,简化了管理和运维。
- 现在,KRaft 模式已经可以用于生产情况,并且会成为未来版本的标准模式。
- 改善消费者和生产者的性能 Kafka 3.7.0 加强了 生产者和消费者的性能,特别是在高并发情况下的消息传输和处理能力。
- 改进的数据压缩和存储优化
- Kafka 3.7.0 对 数据存储和压缩算法举行了优化,提高了存储效率和处理速度。
- 对日记压缩、数据存储格式等方面做了优化,有助于减少存储需求和提拔读写性能。
- 加强的安全性特性
- Kafka 3.7.0 引入了一些新的安全功能,包括对 SASL/OAUTHBEARER 的改进、改进的 ACL(访问控制列表)管理等。
- 主题管理和流量控制的改进
- 对 Kafka 的 主题管理和 流量控制举行了优化,加强了对多租户情况下的支持。
- 更好的资源管理
- Kafka 3.7.0 对集群的 资源管理和监控做了改进,提供了更多的指标和更细粒度的监控能力。
注:在利用 KRaft 模式(Kafka Raft 模式)时,不再需要 Zookeeper,若利用传统的 Zookeeper 模式(未启用 KRaft 模式),则 仍旧需要 Zookeeper 来举行集群元数据管理和协调。
2. 构建
2.1. 提前预备:
Dockerfile是构建用的
kafka_2.13-3.7.0.tgz 是我要摆设的版本
kraft-server.properties 是我需要用到的配置类
2.2. kraft-server.properties 内容
- # 设置 broker 的 ID
- broker.id=1
- # 设置 Kafka 的日志目录(即数据存储目录)
- log.dirs=/app/appuser/data
- # 设置监听器和端口,KRaft 模式的 Kafka 需要同时定义 broker 和 controller 的监听器
- listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
- # 设置 Kafka controller 的监听器名称
- controller.listener.names=CONTROLLER
- # 设置广告的 broker 地址
- advertised.listeners=PLAINTEXT://192.168.74.125:9092
- # 设置 controller quorum 的成员
- controller.quorum.voters=1@localhost:9093
- # 设置日志清理策略(如删除旧日志)
- log.cleanup.policy=delete
- # 设置日志切分大小
- log.segment.bytes=1073741824
- # 启用 Kafka 的 KRaft 模式
- process.roles=broker,controller
- # 开启 Kafka 支持的特性
- confluent.support.metrics.enable=false
复制代码 留意的是advertised.listeners 该配置用于指定Kafka外部访问的地点(客户端访问Kafka时会利用)。需要确保192.168.74.125:9092是可路由并且可达的IP地点。
2.3. Dockerfile 内容
- # 使用包含JDK 8 的基础镜像
- FROM yzy:v2.3
- MAINTAINER yangzhenyu
- # 设置 Kafka 版本
- ARG KAFKA_VERSION=3.7.0
- ARG SCALA_VERSION=2.13
- COPY kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz /app/appuser/
- # 配置 KRaft 模式的 Kafka server
- COPY kraft-server.properties /app/appuser/kafka_${SCALA_VERSION}-${KAFKA_VERSION}/config/
- # 下载并解压 Kafka
- RUN cd /app/appuser \
- && mkdir data \
- && tar -xzf kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz \
- # 格式化 Kafka 数据目录
- && /app/appuser/kafka_${SCALA_VERSION}-${KAFKA_VERSION}/bin/kafka-storage.sh random-uuid \
- && /app/appuser/kafka_${SCALA_VERSION}-${KAFKA_VERSION}/bin/kafka-storage.sh format -t $(/app/appuser/kafka_${SCALA_VERSION}-${KAFKA_VERSION}/bin/kafka-storage.sh random-uuid) -c /app/appuser/kafka_${SCALA_VERSION}-${KAFKA_VERSION}/config/kraft-server.properties
- # 设置 Kafka 的环境变量
- ENV KAFKA_HOME=/app/appuser/kafka_${SCALA_VERSION}-${KAFKA_VERSION}
- ENV PATH=$KAFKA_HOME/bin:$PATH
- # 暴露 Kafka 默认端口
- EXPOSE 9092
- # 设置工作目录
- WORKDIR /app/appuser/kafka_${SCALA_VERSION}-${KAFKA_VERSION}
- # 启动 Kafka
- CMD ["sh", "-c", "${KAFKA_HOME}/bin/kafka-server-start.sh ${KAFKA_HOME}/config/kraft-server.properties"]
复制代码 其中 yzy:v2.3 是我自己制作的私有基础镜像。
留意的是格式化 Kafka 数据目录,否则的话你会无法创建meta.properties等文件报错。

2.4. 构建镜像并运行
docker build -t yzy-kafka-3.7.0:v1.0 .
这里的 . 表现当前目录,是 Dockerfile 地点的目录路径。
查看镜像是否构建成功:
构建成功。
运行 Kafka 容器::
docker run -d --name kafka -p 9092:9092 yzy-kafka-3.7.0:v1.0
此时,Kafka 会在不依赖 Zookeeper 的情况下启动,并运行在 KRaft 模式下。
验证 Kafka 是否正常工作:
docker logs -n 10 kafka
查看容器是否成功:
进入docker容器
docker exec -it kafka /bin/bash
如果在其中过程中出现题目需要调试的话,可以进入镜像调试,下面是进入镜像的命令:
docker run -it yzy-kafka-3.7.0:v1.0 /bin/bash
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |