Kafka 核心源码解读
胡夕
Apache Kafka Committer,老虎证券技术总监
19216 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
结束语 (1讲)
Kafka 核心源码解读
15
15
1.0x
00:00/00:00
登录|注册

特别放送(五) | Kafka 社区的重磅功能:移除 ZooKeeper 依赖

你好,我是胡夕。今天,我们来聊聊 Kafka 社区的一个重磅功能:移除 ZooKeeper 依赖
Kafka 从诞生开始,就跟 ZooKeeper 紧紧地绑在了一起。可以这么说,没有 ZooKeeper,就没有 Kafka 今天的成功。
但是,随着 Kafka 的不断完善和演进,社区逐渐发现,在 ZooKeeper 和 Kafka 结合使用的过程中,一些问题慢慢地显现了出来。比如说,ZooKeeper 并不适合于频繁的写操作,但 Kafka 0.8 时代的消费者就是利用 ZooKeeper 来保存其位移信息的。因此,移除 ZooKeeper 并使用 Kafka 内部主题的方式保存位移,就从根本上规避了 ZooKeeper 的这个弊病。
摆脱 ZooKeeper 依赖的另一个好处在于,这能让 Kafka 变成一个独立的框架。这样,以后在使用 Kafka 时,就不需要再额外维护一套 ZooKeeper 集群了。显然,安装、运维和调优一套分布式集群的代价是很高的,能够去除这样的依赖当然是一件好事。
讲到这里,我猜你一定很想知道,社区究竟打算怎么移除 ZooKeeper 呢?别急,我带你一步步来看下社区的计划。

Clients 演进

首先,我们来看两张图。这两张图总结了 0.8.x 版本和 0.11.x 版本(是否真的是从 0.11 版本开始的变化并不重要)及后续版本的功能变迁。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kafka社区最新推出的功能引起了广泛关注:移除对ZooKeeper的依赖。这一变化将使Kafka成为一个独立的框架,无需额外维护ZooKeeper集群。文章详细介绍了Kafka社区的计划和实施过程,包括0.8.x版本和0.11.x版本及后续版本的功能变迁,以及Kafka的Producer、Consumer和Admin Tool等客户端逐步摆脱了对ZooKeeper的依赖。此外,文章还探讨了Broker端的现状,指出Kafka Broker目前对ZooKeeper的重度依赖,并提出了解决方案。文章还讨论了Network Partition的防范和解决方案,以及Kafka社区如何解决元数据不一致等问题。总体而言,Kafka社区的这一变化将为用户带来更便捷的Kafka使用体验,同时也展现了Kafka社区在技术上的不断创新和进步。值得关注的是,Kafka采用了Metadata as an Event Log + Controller quorum的解决方案,通过将元数据作为Log的方式保存,实现了高可用性、顺序性、增量同步性和可监控性,同时采用Raft来实现Controller quorum,为Kafka的发展提供了新的技术支持。文章还介绍了Kafka社区计划分三步来完成对ZooKeeper的依赖的移除,并探讨了为何社区不直接采用第三方成熟的Raft库来实现Controller的选举。整体而言,本文详细介绍了Kafka社区的技术创新和发展规划,对于关注Kafka技术发展的读者具有重要参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Kafka 核心源码解读》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • JustDoDT
    讲得真不错

    作者回复: 谢谢鼓励:)

    2020-06-27
    3
  • 柠檬C
    在初步学习kafka和es的时候,就感到kafka和es在架构上其实非常类似,比如数据都是基于LSMTree组织、数据分片/分区、分区也有主从的概念等,甚至es数据同步,也采取了像kafka一样的2步拉取更新HW、epoch避免不一致的方式。请问老师,是分布式领域有什么论文支撑这么多的开源组件采用这种实现吗?否则也太巧了 es不同于kafka的地方在于es基于bully算法和raft算法实现选主,不依赖外部服务,但对于raft实现也有所改动。期待未来kafka与es在架构上又一次进行架构上的比较

    作者回复: 这个话题有点大了。分布式领域的确有一些通用的问题是所有框架都要面临和解决的,比如Leader选举、replication、partitioning、failover、一致性等。每一个自然都有相应的研究论文成果出来。

    2020-09-17
    1
  • 兔2🐰🍃
    胡老师,请教下2.2.2之后的版本都向下兼容么,目前遇到Security vulenerabilities ,zk3.4.13。试过2.3.1及之后的,又有Netty 相关包的security risk。请问这个有什么好的方法不。或者用2.6之后的版本会有兼容问题么。

    作者回复: 目前没有得知有大的兼容性问题。你是使用什么版本时碰到了这个问题?

    2021-05-31
  • 曾轼麟
    我曾经试过尝试使用第三方的共识算法库,但是在导入项目的时候发现其依赖了各种版本的jar,甚至有些jar的版本比我当前项目中已经依赖的版本还低,而且两个版本是冲突的,高版本的jar中删除了一些类,导致启动的时候出现各种情况,比如classNotFound 或者 classNotDefiend,我想社区可能也想避免这种情况

    作者回复: 非常有可能出现这种情况。当然,社区自己实现Raft-based protocol的一个原因是自己实现的可以自行把控,不受第三方依赖,否则和移除Zk的初衷不符

    2020-08-06
    2
  • 李先生
    胡哥,有个问题。kafka生产者在高并发的情况下,有时候会报强制关闭的异常:IllegalStateError: Producer is closed forcefully.这种有什么好的解决方案吗?

    作者回复: 是否调用了producer.close方法?

    2020-07-18
    2
  • Cryhard
    等这一切都实现,应该是2021年的3.0版本了吧?

    作者回复: 这个要看KIP-500的进度了:)

    2020-06-28
  • 李家大少爷李昂初
    另一个好处在于,采用了这套机制后,Kafka 可以做元数据的缓存了(metadata caching),即 Broker 能够把元数据保存在磁盘上。 这里应该是元数据的持久化吧?本来元数据就是存在内存当中的。
    2022-04-12
    1
  • 大严
    浩浩荡荡的一篇好文
    2021-01-26
    1
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部