技术 05 - Architecture of Kafka

2020-05-27 00:00:00 数据 专区 订阅 消息 离线

Kafka 作为架构关键的消息组件,十分有必要了解一下 Kafka 的架构与设计。花了大致一个月时间读了下原版的 《Kafka: The Definitive Guide》与 官方文档 design chaper。这两份资料都很不错,推荐阅读,尤其官方文档。

其中 Kafka 架构中有几点值得一提

  1. 使用文件系统,大量依赖操作系统中的 page cache,而非应用内 cache,
    1. 这样可以内存充分利用,而且更加稳定(防止 GC)
    2. 因为是 OS 维护 page cache,所以故障之后容易恢复,不用重建
    3. OS 会比较激进的把内存用作 page cache
  2. 因为访问模式固定,使用 Persistent Queue 作为数据结构
  3. 使用 zero-copy optimization,不用频繁的跟 user space 交互
  4. 因为大部分在操作在内存中进行,而且使用了 zero-copy,所以性能瓶颈可能只会出现下网络上
  5. 选用 pull 模型,从而避免了 push 模型中 push 速度与消费速度不一致,导致 consumer 压力过大的问题
  6. 采用了 ISR( in-sync replicas ) 来保证备份中数据是一致的,ISR 的集合维护在 ZooKeeper 中。 没有采用一般的多数票选举的方法。
  7. 因为为了性能没有使用 fsync,所以可能导致数据不能完整恢复
  8. 提供大量的可配置空间,方便使用者在 Consistency 与 Availability 中选择
  9. 个人认为不要相信 Kafka 的 exactly once,而是使用 at least once,应用方再去处理重复的问题

盗取两张架构图:

原文链接:https://www.digitalvidya.com/blog/kafka-architecture/
原文链接:https://sookocheff.com/post/kafka/kafka-in-a-nutshell/

笔记思维导图:

相关文章