码迷,mamicode.com
首页 > 其他好文 > 详细

Kafka原理

时间:2018-08-10 23:12:32      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:数据保存   集合   需要   com   clust   topic   broker   取消   数据量   

Kafka整体结构图

技术分享图片

  • Producer :消息生产者,就是向 kafka broker 发消息的客户端。
  • Consumer :消息消费者,向 kafka broker 取消息的客户端
  • Topic :每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。
  • Consumer Group (CG):这是 kafka 用来实现一个 topic 消息的广播和单播的手段。一个 topic 可以有多个 CG。topic 的消息会复制(不是真的复制,是概念上的)到所有的 CG,但每个 partition 只会把消息发给该 CG 中的一个consumer。如果需要实现广播,只要每个 consumer 有一个独立的 CG 就可以了。要实现单播只要所有的 consumer 在同一个 CG。用 CG 还可以将 consumer 进行自由的分组而不需要多次发送消息到不同的 topic。
  • Broker :一台 kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker 可以容纳多个 topic。
  • Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个topic 可以分为多个 partition,每个 partition 是一个有序的队列。partition 中的每条消息都会被分配一个有序的 id(offset)。kafka 只保证按一个 partition 中的顺序将消息发给 consumer,不保证一个 topic 的整体(多个 partition 间)的顺序。
  • Offset:kafka 的存储文件都是按照 offset.kafka 来命名,用 offset 做名字的好处是方便查找。例如你想找位于 2049 的位置,只要找到 2048.kafka 的文件即可。
  • Replication:Kafka 支持以 Partition 为单位对 Message 进行冗余备份,每个 Partition 都可以配置至少 1 个 Replication。
  • Leader:每个 Replication 集合中的 Partition 都会选出一个唯一的 Leader,所有的读写请求都由Leader 处理。其他 Replicas 从 Leader 处把数据更新同步到本地。每个 Cluster 当中会选举出一个 Broker 来担任 Controller,负责处理 Partition的 Leader 选举,协调 Partition 迁移等工作。
  • ISR(In-Sync Replica):是 Replicas 的一个子集,表示目前 Alive 且与 Leader 能够“Catch-up”的Replicas 集合。 由于读写都是首先落到 Leader 上,所以一般来说通过同步机制从 Leader 上拉取数据的 Replica 都会和 Leader 有一些延迟(包括了延迟时间和延迟条数两个维度),任意一个超过阈值都会把该 Replica 踢出 ISR。每个 Partition 都有它自己独立的 ISR。

分片与副本机制

分片:当数据量非常大的时候,一个服务器存放不了,就将数据分成两个或者多个部分,存放在多台服务器上。每个服务器上的数据,叫做一个分片。
副本:当数据只保存一份的时候,有丢失的风险。为了更好的容错,将数据拷贝几份,保存到不同的机器上。
Kafka分配Replica的算法如下:

  1. 将所有Broker(假设共n个Broker)和待分配的Partition排序
  2. 将第i个Partition分配到第(i mod n)个Broker上
  3. 将第i个Partition的第j个Replica分配到第((i + j) mode n)个Broker上

消息不丢失机制

生产者端消息不丢失

技术分享图片

  1. 消息生产分为同步模式和异步模式
  2. 消息确认分为三个状态
    (a)0:生产者只负责发送数据
    (b)1:某个partition的leader收到数据给出响应
    (c)-1:某个partition的所有副本都收到数据后给出响应
  3. 在同步模式下
    (a)生产者等待10S,如果broker没有给出ack响应,就认为失败。
    (b)生产者重试3次,如果还没有响应,就报错。
  4. 在异步模式下
    (a)先将数据保存在生产者端的buffer中。Buffer大小是2万条。
    (b)满足数据阈值或者数量阈值其中的一个条件就可以发送数据。
    (c)发送一批数据的大小是500条。

如果broker迟迟不给ack,而buffer又满了。开发者可以设置是否直接清空buffer中的数据。

Borker端消息不丢失

broker端的消息不丢失,其实就是用partition副本机制来保证。
Producer ack -1. 能够保证所有的副本都同步好了数据。其中一台机器挂了,并不影像数据的完整性。

消费者端消息不丢失

Kafka原理

标签:数据保存   集合   需要   com   clust   topic   broker   取消   数据量   

原文地址:https://www.cnblogs.com/lifuwei/p/9453112.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!