Kafka 4.0 发布,彻底移除 ZooKeeper!

最近 Apache Kafka 4.0 版本发布,这是 Kafka 的一个重要里程碑。Kafka 移除 ZooKeeper 早在几年前就开始准备,4.0 版本是第一个可以完全不使用 ZooKeeper 的版本。

Kafka 4.0 默认允许在 KRaft 模式下,大大简化了集群的部署和管理,消除了集成 ZooKeeper 的复杂性。

在 KRaft 模式下,一些配置、指标和功能发生了不小的变化,今天我们来看一下都有哪些改变。

删除了密码编码相关的配置

这些配置在 ZooKeeper 模式下使用,用来定义和备份密码,这个密钥用于加密加密敏感数据(如密码)。需要指定加密的算法和密钥生成方法(如 AES、RSA),并控制密钥长度和加密强度。相关参数如下:

password.encoder.secret
password.encoder.old.secret
password.encoder.keyfactory.algorithm
password.encoder.cipher.algorithm
password.encoder.key.length
password.encoder.iterations

在 KRaft 模式下,Kafka 将敏感数据存储在 records,这些敏感数据不需要加密。

移除下面配置

Removed control.plane.listener.name

Kafka 依赖 ZooKeeper 管理元数据,但是一些内部操作(比如 Broker Controller 和普通 Broker 之间通信)依然需要 Kafka 内部控制面板来协调。

在 KRaft 模式下,Kafka 消除了对 ZooKeeper 的依赖,控制面板功能完全集成到 Kafka 内部。处理角色明确分开:brokers 处理与数据相关的请求,而 broker controllers 管理跟元数据相关的请求。controllers 使用 Raft 协议进行内部通信,操作方式与 ZooKeeper 模型不同。使用以下参数来配置控制面板监听器:

controller.listener.names
listeners
listener.security.protocol.map

删除优雅停服相关配置

使用外部注册中心,多数情况是需要配置优雅停服的。这些配置在 ZooKeeper 模式下用于定义主动停服的最大重试次数和重试回退时间。它可以降低意外 Controller 变更和数据不一致的风险。

controlled.shutdown.max.retries
controlled.shutdown.retry.backoff.ms

在 KRaft 模式下,Kafka 使用 Raft 协议来管理元数据。Broker 关闭过程跟基于仲裁模式的 ZooKeeper 模式不同。Raft 协议的 Controller 切换依赖自动领导者切换,元数据由 Controller 更新,关闭过程更加可靠和高效。

删除了生成 Broker id 相关的配置

这些配置在 ZooKeeper 模式下用于自动生成 Broker id 并控制 Broker id 生成过程。

reserved.broker.max.id
broker.id.generation.enable

node id

Kafka在 KRaft 模式下使用 node id 来标识 server。

node.id

删除了 Broker 协议版本相关的配置

inter.broker.protocol.version

这些配置在 ZooKeeper 模式下用于定义 Broker 之间的通信协议版本。在 KRaft 模式下,Kafka 使用 metadata.version 来控制集群的特征级别,并且可以使用 bin/Kafka-features.sh 脚本进行管理。

移除 ZooKeeper 相关的动态配置

advertised.listeners

在 KRaft 模式下,要修改这些配置,就需要重启 Broker。

删除了领导者不平衡配置

leader.imbalance.per.broker.percentage

这个配置只在 ZooKeeper 中使用。用于限制 ZooKeeper 中的选举领导者的频率。

移除 ZooKeeper 相关配置

zookeeper.connect
zookeeper.session.timeout.ms
zookeeper.connection.timeout.ms
zookeeper.set.acl
zookeeper.max.in.flight.requests
zookeeper.ssl.client.enable
zookeeper.clientCnxnSocket
zookeeper.ssl.keystore.location
zookeeper.ssl.keystore.password
zookeeper.ssl.keystore.type
zookeeper.ssl.truststore.location
zookeeper.ssl.truststore.password
zookeeper.ssl.truststore.type
zookeeper.ssl.protocol
zookeeper.ssl.enabled.protocols
zookeeper.ssl.cipher.suites
zookeeper.ssl.endpoint.identification.algorithm
zookeeper.ssl.crl.enable
zookeeper.ssl.ocsp.enable

删除了 ZooKeeper 相关监控指标

下面参数监控网络处理器平均空闲率:

ControlPlaneNetworkProcessorAvgIdlePercent

下面指标监控所有处理器上断开的连接总数:

ControlPlaneExpiredConnectionsKilledCount

在 KRaft 模式下,Kafka 提供了网络处理器连接过期指标。指标如下:

NetworkProcessorAvgIdlePercent
ExpiredConnectionsKilledCount

删除了 ZooKeeper 独有指标

kafka.controller:type=ControllerChannelManager,name=QueueSize
kafka.controller:type=ControllerChannelManager,name=RequestRateAndQueueTimeMs
kafka.controller:type=ControllerEventManager,name=EventQueueSize
kafka.controller:type=ControllerEventManager,name=EventQueueTimeMs
kafka.controller:type=ControllerStats,name=AutoLeaderBalanceRateAndTimeMs
kafka.controller:type=ControllerStats,name=ControlledShutdownRateAndTimeMs
kafka.controller:type=ControllerStats,name=ControllerChangeRateAndTimeMs
kafka.controller:type=ControllerStats,name=ControllerShutdownRateAndTimeMs
kafka.controller:type=ControllerStats,name=IdleRateAndTimeMs
kafka.controller:type=ControllerStats,name=IsrChangeRateAndTimeMs
kafka.controller:type=ControllerStats,name=LeaderAndIsrResponseReceivedRateAndTimeMs
kafka.controller:type=ControllerStats,name=LeaderElectionRateAndTimeMs
kafka.controller:type=ControllerStats,name=ListPartitionReassignmentRateAndTimeMs
kafka.controller:type=ControllerStats,name=LogDirChangeRateAndTimeMs
kafka.controller:type=ControllerStats,name=ManualLeaderBalanceRateAndTimeMs
kafka.controller:type=KafkaController,name=MigratingZkBrokerCount
kafka.controller:type=ControllerStats,name=PartitionReassignmentRateAndTimeMs
kafka.controller:type=ControllerStats,name=TopicChangeRateAndTimeMs
kafka.controller:type=ControllerStats,name=TopicDeletionRateAndTimeMs
kafka.controller:type=KafkaController,name=TopicsIneligibleToDeleteCount
kafka.controller:type=ControllerStats,name=TopicUncleanLeaderElectionEnableRateAndTimeMs
kafka.controller:type=ControllerStats,name=UncleanLeaderElectionEnableRateAndTimeMs
kafka.controller:type=ControllerStats,name=UncleanLeaderElectionsPerSec
kafka.controller:type=ControllerStats,name=UpdateFeaturesRateAndTimeMs
kafka.controller:type=ControllerStats,name=UpdateMetadataResponseReceivedRateAndTimeMs
kafka.controller:type=KafkaController,name=ActiveBrokerCount
kafka.controller:type=KafkaController,name=ActiveControllerCount
kafka.controller:type=KafkaController,name=ControllerState
kafka.controller:type=KafkaController,name=FencedBrokerCount
kafka.controller:type=KafkaController,name=GlobalPartitionCount
kafka.controller:type=KafkaController,name=GlobalTopicCount
kafka.controller:type=KafkaController,name=OfflinePartitionsCount
kafka.controller:type=KafkaController,name=PreferredReplicaImbalanceCount
kafka.controller:type=KafkaController,name=ReplicasIneligibleToDeleteCount
kafka.controller:type=KafkaController,name=ReplicasToDeleteCount
kafka.controller:type=KafkaController,name=TopicsToDeleteCount
kafka.controller:type=KafkaController,name=ZkMigrationState
kafka.server:type=DelayedOperationPurgatory,name=PurgatorySize,delayedOperation=ElectLeader
kafka.server:type=DelayedOperationPurgatory,name=PurgatorySize,delayedOperation=topic
kafka.server:type=DelayedOperationPurgatory,name=NumDelayedOperations,delayedOperation=ElectLeader
kafka.server:type=DelayedOperationPurgatory,name=NumDelayedOperations,delayedOperation=topic
kafka.server:type=SessionExpireListener,name=SessionState
kafka.server:type=SessionExpireListener,name=ZooKeeperAuthFailuresPerSec
kafka.server:type=SessionExpireListener,name=ZooKeeperDisconnectsPerSec
kafka.server:type=SessionExpireListener,name=ZooKeeperExpiresPerSec
kafka.server:type=SessionExpireListener,name=ZooKeeperReadOnlyConnectsPerSec
kafka.server:type=SessionExpireListener,name=ZooKeeperSaslAuthenticationsPerSec
kafka.server:type=SessionExpireListener,name=ZooKeeperSyncConnectsPerSec
kafka.server:type=ZooKeeperClientMetrics,name=ZooKeeperRequestLatencyMs

最后

移除了这么多配置,部署不用再考虑 ZooKeeper,架构上整洁了太多。

<think>好的,我需要帮助用户在CentOS系统上安装Kafka 4.0版本。首先,用户提到的Kafka 4.0可能还处于早期阶段,因为根据引用[2]和引用[4]的信息,Kafka 4.0可能尚未正式发布,或者可能还在开发中。引用[2]提到,Kafka 3.x版本开始弃用Java 8,而Kafka 4.0将完全放弃Java 8,建议使用Java 11或更高版本。因此,我需要确认用户是否确实需要安装Kafka 4.0,或者是否有版本上的误解。 接下来,用户的操作系统是CentOS,具体版本未提及,但根据引用中的例子,可能是CentOS7。需要检查Kafka 4.0的系统要求,特别是Java版本。根据引用[2],Kafka 3.x需要Java 11或更高,而4.0可能要求更高,比如Java 17。因此,用户需要先安装合适的JDK版本。 安装步骤可能包括以下几步:1. 安装Java环境;2. 下载Kafka 4.0的安装包;3. 配置Kafka集群(如果需要);4. 启动Kafka服务。但根据引用[4],Kafka 4.0可能使用KRaft模式(替代ZooKeeper),因此配置步骤可能与旧版本不同,需要参考官方文档。 另外,引用[3]提到了在启动脚本中配置JMX端口和服务器IP,这可能对监控有用,用户可能需要类似配置。同时,引用[1]和[3]中的SASL认证配置可能在需要安全设置时适用,但用户当前的问题未提及安全需求,可能暂时不需要。 需要注意的是,用户提供的引用中并没有直接关于Kafka 4.0安装的详细步骤,尤其是因为4.0可能尚未正式发布,所以可能需要参考最新的官方文档或社区资源。此外,用户可能需要从Apache官网获取正确的下载链接,并确保依赖项满足要求。 最后,生成相关问题需要考虑用户可能的后续需求,比如集群配置、性能优化、常见错误处理等,以及版本升级可能带来的变化。</think>在CentOS系统上安装Kafka 4.0需注意以下关键步骤: ### 一、环境准备 1. **确认Java版本** Kafka 4.0需JDK 17或更高版本(参考Kafka 4.0对Java的依赖变化[^2])。使用以下命令安装JDK 17: ```bash sudo yum install java-17-openjdk-devel java -version # 验证安装 ``` 2. **下载Kafka 4.0安装包** 从Apache官网获取最新版本(若4.0发布): ```bash wget https://downloads.apache.org/kafka/4.0.0/kafka_2.13-4.0.0.tgz tar -xzf kafka_2.13-4.0.0.tgz cd kafka_2.13-4.0.0 ``` ### 二、集群模式配置(KRaft模式) 1. **生成集群ID** Kafka 4.0默认使用KRaft模式(无需ZooKeeper)[^2][^4]: ```bash bin/kafka-storage.sh random-uuid # 输出示例:m6BZb8yRSzmdNvW9kzOoQg ``` 2. **格式化存储目录** 每个节点执行(替换`<uuid>`为生成的ID): ```bash bin/kafka-storage.sh format -t <uuid> -c config/kraft/server.properties ``` 3. **配置文件调整** 编辑`config/kraft/server.properties`,设置节点参数: ```properties node.id=1 # 节点唯一ID(集群内不重复) controller.quorum.voters=1@192.168.1.101:9093,2@192.168.1.102:9093 # 控制器节点列表 listeners=PLAINTEXT://:9092,CONTROLLER://:9093 advertised.listeners=PLAINTEXT://192.168.1.101:9092 # 本机IP log.dirs=/tmp/kraft-logs # 日志存储路径 ``` ### 三、启动服务 ```bash # 前台启动(测试用) bin/kafka-server-start.sh config/kraft/server.properties # 后台启动 bin/kafka-server-start.sh -daemon config/kraft/server.properties ``` ### 四、验证安装 1. **创建测试主题** ```bash bin/kafka-topics.sh --create --topic test --partitions 3 --replication-factor 2 --bootstrap-server 192.168.1.101:9092 ``` 2. **查看集群状态** ```bash bin/kafka-metadata-shell.sh --snapshot /tmp/kraft-logs/__cluster_metadata-0/00000000000000000000.log ``` ### 五、配置系统服务(可选) 参考引用[3],创建`/etc/systemd/system/kafka.service`: ```ini [Unit] Description=Kafka KRaft Server After=network.target [Service] User=kafka ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/kraft/server.properties Restart=on-failure [Install] WantedBy=multi-user.target ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值