ZooKeeper 不行了?居然被 Kafka 抛弃了!

Kafka 2.8 版本引入了 KRaft 模式,用内部 Quorum 控制器替代 ZooKeeper,简化系统架构并提升性能。本文介绍 KRaft 的工作机制及带来的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击上方“芋道源码”,选择“设为星标

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 8:55 更新文章,每天掉亿点点头发...

源码精品专栏

 

来源:Java指南者


图片

Kafka 2.8 版本

分布式发布与订阅系统Apache Kafka在即将发布的2.8版本,使用Kafka内部的Quorum控制器来取代ZooKeeper。

因此,用户第一次可在完全不需要ZooKeeper的情况下执行Kafka,这不只节省运算资源,并且也使得Kafka效能更好,还可支持规模更大的集群。

过去Apache ZooKeeper是Kafka这类分布式系统的关键,ZooKeeper扮演协调代理的角色,所有代理服务器启动时,都会连接到Zookeeper进行注册。

当代理状态发生变化时,Zookeeper也会储存这些数据,在过去,ZooKeeper是一个强大的工具,但是毕竟ZooKeeper是一个独立的软件,使得Kafka整个系统变得复杂,因此官方决定使用内部Quorum控制器来取代ZooKeeper。

KRaft:Kafka 的 Raft

这项工作从去年4月开始,而现在这项工作取得部分成果,用户将可以在2.8版本,在没有ZooKeeper的情况下执行Kafka,官方称这项功能为Kafka Raft元数据模式(KRaft)。

在KRaft模式,过去由Kafka控制器和ZooKeeper所操作的元数据,将合并到这个新的Quorum控制器,并且在Kafka集群内部执行。

当然,如果使用者有特殊使用情境,Quorum控制器也可以在专用的硬件上执行。

图片

KRaft协定使用事件驱动机制来追踪整个集群的元数据,过去必须依赖RPC来处理的任务,现在受益于事件驱动以及实际的日志传输,这些改变所带来的好处,便是让Kafka仍够支持更多的分割。

移除 ZooKeeper 的收益

过去Kafka因为带着ZooKeeper,因此被认为拥有笨重的基础设施。

而在移除ZooKeeper之后,Kafka更轻巧更适用于小规模工作负载,轻量级单体程序适合用于边缘以及轻量级硬件解决方案。

注意事项

值得注意的是,在抢先体验版中,有部分像是ACL、安全以及交易等功能都尚未支持,而且在KRaft模式下,也还不支持重新分配分割和JBOD,官方提到,这些功能会在今年稍晚的版本中提供,由于很多功能处于测试阶段,不建议大家将其用于生产环境中。

对了,如果胖友还没入门过 Kafka 的话,可以看看艿艿写的三篇教程:

  • 《芋道 Kafka 极简入门》:http://www.iocoder.cn/Kafka/install/?nb

  • 《芋道 Spring Boot 分布式消息队列 Kafka 入门》:http://www.iocoder.cn/Spring-Boot/Kafka/?nb

  • 《芋道 Spring Cloud 消息队列 Kafka 入门》:http://www.iocoder.cn/Spring-Cloud/Kafka/?nb

  • 《芋道 Spring Cloud 事件总线 Bus Kafka 入门》:http://www.iocoder.cn/Spring-Cloud/Bus-Kafka/?nb



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

已在知识星球更新源码解析如下:

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 20 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
### 如何在Kafka中配置消息超时并丢弃过期消息 在Apache Kafka中,可以通过设置`log.retention.*`参数来管理日志文件的清理行为。这些参数决定了消息在主题分区的日志中保留的时间长度或大小限制。如果超过设定条件,则消息会被标记为可删除,并由Kafka定期清理。 #### 日志保留时间配置 通过调整`log.retention.hours`、`log.retention.minutes`或者`log.retention.ms`可以指定消息的最大存活时间。例如: ```properties log.retention.hours=24 ``` 上述配置表示所有存储在这个主题下的消息将在24小时之后被自动清除[^1]。需要注意的是,默认情况下该属性适用于整个Broker级别;然而也可以针对特定的主题单独定义其保留策略。 另外还有一种基于字节数量的方式来进行控制——即当达到一定体积后便开始移除旧记录直到满足新的空间需求为止。这需要用到如下几个选项之一: - `log.segment.bytes`: 单个segment文件最大尺寸. - `log.roll.ms`: 创建新segment之前等待毫秒数. 一旦启用了分片机制(`log.cleanup.policy=compact,delete`) ,那么即使设置了较短的有效期限也可能不会立即生效,因为Compact操作本身存在延迟特性[^2]. 对于消费者端而言,在面对大量突发流量可能导致处理不过来的状况下(如每秒钟生产五万笔订单),应当考虑增加Consumer实例数量形成集群共同承担负载压力的同时优化单线程内的解析效率至低于平均耗时两百毫秒之下才能有效缓解积压现象的发生概率[^3]. 最后值得注意的一点是除了官方文档外还有很多第三方库可以帮助我们更便捷地完成诸如过滤等功能开发工作[^4],但在实际应用过程中仍需依据具体业务逻辑做出相应修改适配最佳实践方案. ```bash cd /export/servers/kafka_2.11-1.0.0 bin/kafka-configs.sh --zookeeper node01:2181,node02:2181,node03:2181 --alter --add-config retention.ms=86400000 --entity-type topics --entity-name itcast_order ``` 以上命令展示了如何更改名为itcast_order 的Topic上的retention时间为一天 (以毫秒计) 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值