技术 05 - Architecture of Kafka
Kafka 作为架构关键的消息组件,十分有必要了解一下 Kafka 的架构与设计。花了大致一个月时间读了下原版的 《Kafka: The Definitive Guide》与 官方文档 design chaper。这两份资料都很不错,推荐阅读,尤其官方文档。
其中 Kafka 架构中有几点值得一提
- 使用文件系统,大量依赖操作系统中的 page cache,而非应用内 cache,
- 这样可以内存充分利用,而且更加稳定(防止 GC)
- 因为是 OS 维护 page cache,所以故障之后容易恢复,不用重建
- OS 会比较激进的把内存用作 page cache
- 因为访问模式固定,使用 Persistent Queue 作为数据结构
- 使用 zero-copy optimization,不用频繁的跟 user space 交互
- 因为大部分在操作在内存中进行,而且使用了 zero-copy,所以性能瓶颈可能只会出现下网络上
- 选用 pull 模型,从而避免了 push 模型中 push 速度与消费速度不一致,导致 consumer 压力过大的问题
- 采用了 ISR( in-sync replicas ) 来保证备份中数据是一致的,ISR 的集合维护在 ZooKeeper 中。 没有采用一般的多数票选举的方法。
- 因为为了性能没有使用 fsync,所以可能导致数据不能完整恢复
- 提供大量的可配置空间,方便使用者在 Consistency 与 Availability 中选择
- 个人认为不要相信 Kafka 的 exactly once,而是使用 at least once,应用方再去处理重复的问题
盗取两张架构图:
笔记思维导图:
相关文章