Apache Kafka 是什么

Kafka 是基于发布与订阅的消息系统。Kafka 是一个分布式的,可分区的,冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。

Kafka 的主要特点

  • 1、同时为发布和订阅提供高吞吐量。据了解,Kafka 每秒可以生产约 25 万消息(50MB),每秒处理 55 万消息(110MB)。
  • 2、可进行持久化操作。将消息持久化到磁盘,因此可用于批量消费,例如 ETL ,以及实时应用程序。通过将数据持久化到硬盘,以及replication ,可以防止数据丢失。
  • 3、分布式系统,易于向外扩展。所有的 Producer、Broker 和Consumer 都会有多个,均为分布式的。并且,无需停机即可扩展机器。
  • 4、消息被处理的状态是在 Consumer 端维护,而不是由 Broker 端维护。当失败时,能自动平衡。

Kafka 的设计要点

1.吞吐量:

  • 1、数据磁盘持久化:消息不在内存中 Cache ,直接写入到磁盘,充分利用磁盘的顺序读写性能。
  • 2、zero-copy:减少 IO 操作步骤
  • 3、数据批量发送
  • 4、数据压缩
  • 5、Topic 划分为多个 Partition ,提高并行度。
数据在磁盘上存取代价为 O(1):Kafka以 Topic 来进行消息管理,每个 Topic 包含多个Partition
,每个 Partition 对应一个逻辑 log ,有多个 segment 文件组成。每个 segment 中存储多条消
息,消息 id 由其逻辑位置决定,即从消息 id 可直接定位到消息的存储位置,避免 id 到位置的
额外映射。每个 Partition 在内存中对应一个 index ,记录每个 segment 中的第一条消息移。

发布者发到某个 Topic 的消息会被均匀的分布到多个 Partition 上(随机或根据用户指定的回调
函数进行分布),Broker 收到发布消息往对应 Partition 的最后一个 segment 上添加该消息。
 当某个 segment上 的消息条数达到配置值或消息发布时间超过阈值时,segment上 的消息会
被 flush 到磁盘,只有 flush 到磁盘上的消息订阅者才能订阅到,segment 达到一定的大小后
将不会再往该 segment 写数据,Broker 会创建新的 segment 文件。

2.负载均衡

  • 1、Producer 根据用户指定的算法,将消息发送到指定的 Partition 中。
  • 2、Topic 存在多个 Partition ,每个 Partition 有自己的replica ,每个 replica 分布在不同的 Broker 节点上。多个Partition 需要选取出 Leader partition ,Leader Partition 负责读写,并由 Zookeeper 负责 fail over 。
  • 3、相同 Topic 的多个 Partition 会分配给不同的 Consumer 进行拉取消息,进行消费。

3.拉取系统
由于 Kafka Broker 会持久化数据,Broker 没有内存压力,因此, Consumer 非常适合采取 pull 的方式消费数据,具有以下几点好处:

  • 1、简化 Kafka 设计。
  • 2、Consumer 根据消费能力自主控制消息拉取速度。
  • 3、Consumer 根据自身情况自主选择消费模式,例如批量,重复消费,从尾端开始消费等。

4.可扩展性:通过 Zookeeper 管理 Broker 与 Consumer 的动态加入与离开。

  • 1、当需要增加 Broker 节点时,新增的 Broker 会向 Zookeeper 注册,而 Producer 及 Consumer 会根据注册在 Zookeeper 上的 watcher 感知这些变化,并及时作出调整。
  • 2、当新增和删除 Consumer 节点时,相同 Topic 的多个 Partition 会分配给剩余的 Consumer 们。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一.什么是kafka Kafka是一种消息中件间在了解kafka之前,我们先来了解一下什么是消息中间件消息中间件是...
    经纶先生阅读 1,144评论 0 1
  • 1. 简介 Kafka 是linkedin 公司用于日志处理的分布式消息队列,同时支持离线和在线日志处理。kafk...
    HAO延WEI阅读 347评论 1 1
  • 一、消息队列Message Queue 两种模式 点对点模式点对点模式是一个基于拉取或轮询的消息传送模型,由消费者...
    上杉丶零阅读 3,993评论 3 51
  • 摘要目前来说市面上可以选择的消息队列非常多,像activemq,rabbitmq,zeromq已经被大多数人耳熟能...
    ThoughtWorks阅读 496评论 0 6
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 4,348评论 0 13