整体结构

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZXJpY19zdW5haA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">



Producer

producer依据用户指定的算法,将消息发送到指定的partition

Part



  1. kafka以topic来进行消息管理,每一个topic包括多个part(ition),每一个part相应一个逻辑log,有多个segment组成。
  2. 每一个segment中存储多条消息(见下图),消息id由其逻辑位置决定。即从消息id可直接定位到消息的存储位置。避免id到位置的额外映射。
  3. 每一个part在内存中相应一个index,记录每一个segment中的第一条消息偏移。
  4. 公布者发到某个topic的消息会被均匀的分布到多个part上(随机或依据用户指定的回调函数进行分布)。broker收到公布消息往相应part的最后一个segment上加入该消息,
  5. 当某个segment上的消息条数达到配置值或消息公布时间超过阈值时。segment上的消息会被flush到磁盘。仅仅有flush到磁盘上的消息订阅者才干订阅到。
  6. segment达到一定的大小后将不会再往该segment写数据。broker会创建新的segment。

Broke

  1. 消息不在内存中cache,直接写入到磁盘,充分利用磁盘的顺序读写性能
  2. 直接使用linux 文件系统的cache,来高效缓存数据。
  3. 即使消息被消费,消息仍然不会被马上删除.日志文件将会依据broker中的配置要求,保留一定的时间之后删除
  4. 採用linux Zero-Copy提高发送性能。

  5. Topic划分为多个partition,提高parallelism
  6. 能够通过实现Partitioner接口来定制Partition的分区规则
  7. At least one 消息绝不会丢。但可能会反复传输
  8. 通过冗余机制来保证信息的安全
  9. 一个Broke能够包括多个Topic的Part,一个Topic也能够将多个Part分布到不同的不同的Broke上
  10. 数据压缩:支持GZIP和Snappy压缩协议

Consumer 公共特性

  1. Consumer依据消费能力自主控制消息拉取速度
  2. Consumer依据自身情况自主选择消费模式,比如批量,反复消费,从尾端開始消费等

Lower Level Consumer

  1. Consumer从kafka集群pull数据
  2. Consumer负责维护消息的消费记录,控制获取消息的offset
  3. Consumer可将offset设成一个较小的值,又一次消费一些消息
  4. 必须找出指定Topic Partition中的lead
    broker
  5. 加入事务管理机制以保证消息被处理且仅被处理一次
  6. 在一个处理过程中仅仅消费Partition当中的一部分消息

High Level Consumer

  1. High Level模式下的Group Name 是整个Kafka集群的全局变量
  2. 消息消费以Consumer Group为单位,每一个Consumer Group中能够有多个consumer,每一个consumer是一个线程。topic的每一个partition同一时候仅仅能被某一个consumer读 取。Consumer Group相应的每一个partition都有一个最新的offset的值,存储在zookeeper上的。

    所以在正常情况下不会出现反复消费的情况。

  3. 由于consumer的offerset并非实时的传送到zookeeper(通过配置来制定更新周期)。所以Consumer假设突然Crash,有可能会读取反复的信息
  4. High Level Consumer 能够而且应该被使用在多线程的环境,线程模型中线程的数量(也代表group中consumer的数量)和topic的partition数量有关,以下列举一些规则:

    1. 当提供的线程数量多于partition的数量。则部分线程将不会接收到消息;
    2. 当提供的线程数量少于partition的数量,则部分线程将从多个partition接收消息;
    3. 当某个线程从多个partition接收消息时,不保证接收消息的顺序;可能出现从partition3接收5条消息,从partition4接收6条消息。接着又从partition3接收10条消息。
    4. 当加入很多其它线程时,会引起kafka做re-balance, 可能改变partition和线程的相应关系。

Consumer Group

  1. 同意consumer
    group(包括多个consumer。如一个集群同一时候消费)对一个topic进行消费。不同的consumer
    group之间独立订阅。互不干扰。

  2. 当broker或consumer增加或离开时会触发负载均衡算法,使得一个consumer
    group内的多个consumer的订阅负载平衡
  3. 每一个partition仅仅会被consumer
    group内的一个consumer消费,故kafka保证每一个partition内的消息会被顺序的订阅,但多个Consumer
    Group可同一时候消费这一消息。。
  4. 每一个Consumer属于一个特定的Consumer Group(可为每一个Consumer指定group name,若不指定group name则属于默认的group
  5. 假设须要实现广播,仅仅要每一个Consumer有一个独立的Group
  6. 要实现单播仅仅要全部的Consumer在同一个Group里

Zookeeper

  1. 每一个broker启动后会在zookeeper上注冊一个暂时的broker
    registry,包括broker的ip地址和port号。所存储的topics和partitions信息。

  2. 每一个consumer启动后会在zookeeper上注冊一个暂时的consumer
    registry:包括consumer所属的consumer
    group以及订阅的topics。
  3. 每一个consumer
    group关联一个暂时的owner registry和一个持久的offset
    registry。对于被订阅的每一个partition包括一个owner
    registry。内容为订阅这个partition的consumer id;同一时候包括一个offset registry。内容为上一次订阅的offset



Kafka知识点汇总的更多相关文章

  1. nginx几个知识点汇总

    WHY? 为什么用Nginx而不用LVS? 7点理由足以说明一切:1 .高并发连接: 官方测试能够支撑 5 万并发连接,在实际生产环境中跑到 2 - 3 万并发连接数.?2 .内存消耗少: 在 3 万 ...

  2. python全栈开发 * 10知识点汇总 * 180612

    10 函数进阶 知识点汇总 一.动态参数 形参的第三种1.动态接收位置传参 表达:*args (在参数位置编写 * 表⽰接收任意内容) (1)动态位置参数def eat(*args): print(a ...

  3. 清华大学OS操作系统实验lab1练习知识点汇总

    lab1知识点汇总 还是有很多问题,但是我觉得我需要在查看更多资料后回来再理解,学这个也学了一周了,看了大量的资料...还是它们自己的80386手册和lab的指导手册觉得最准确,现在我就把这部分知识做 ...

  4. kafka知识点整理总结

    kafka知识点整理总结 只不过是敷衍 2017-11-22 21:39:59 kafka知识点整理总结,以备不时之需. 为什么要使用消息系统: 解耦 并行 异步通信:想向队列中放入多少消息就放多少, ...

  5. c++ 函数知识点汇总

    c++ 函数知识点汇总 swap函数 交换两个数组元素 比如 swap(a[i],a[j]); 就是交换a[i] 和 a[j] 的值 strcpy() 复制一个数组元素的值到另一个数组元素里 strc ...

  6. 前端开发 JavaScript 干货知识点汇总

    很多初学的朋友经常问我,前端JavaScript都需要学习哪些东西呀?哪些是JavaScript的重点知识啊? 其实做前端开发工程师,所有的知识点都是我们学习必备的东西,只有扎实的技术基础才是高薪的关 ...

  7. BBS项目知识点汇总

    目录 bbs项目知识点汇总 一. JavaScript 1 替换头像 2 form表单拿数据 3 form组件error信息渲染 4 添加html代码 5 聚焦操作 二 . html在线编辑器 三 . ...

  8. Java面试知识点汇总

    Java面试知识点汇总 置顶 2019年05月07日 15:36:18 温柔的谢世杰 阅读数 21623 文章标签: 面经java 更多 分类专栏: java 面试 Java面试知识汇总   版权声明 ...

  9. 离散数学 II(最全面的知识点汇总)

    离散数学 II(知识点汇总) 目录 离散数学 II(知识点汇总) 代数系统 代数系统定义 例子 二元运算定义 运算及其性质 二元运算的性质 封闭性 可交换性 可结合性 可分配性 吸收律 等幂性 消去律 ...

随机推荐

  1. python jieba包用法总结

    # coding: utf-8 # ###jieba特性介绍 # 支持三种分词模式: # 精确模式,试图将句子最精确地切开,适合文本分析: # 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非 ...

  2. Percona XtraBackup 2.4新特性之恢复单个表数据

    参考文档:https://www.percona.com/doc/percona-xtrabackup/2.4/xtrabackup_bin/restoring_individual_tables.h ...

  3. BZOJ 1855 [Scoi2010]股票交易 ——动态规划

    DP方程是比较简单的,主要有三种:什么都不做.买入.卖出. 发现买入卖出都是$\Theta (n^3)$但是转移方程都是线性的,而且决策和当前的情况是分开的. 所以可以单调队列优化. 复杂度$\The ...

  4. BZOJ 1443 [JSOI2009]游戏Game ——博弈论

    好题. 首先看到棋盘,先黑白染色. 然后就是二分图的经典模型. 考虑最特殊的情况,完美匹配,那么先手必胜, 因为无论如何,先手走匹配边,后手无论走哪条边,总有对应的匹配边. 如果在不在最大匹配中出发, ...

  5. BZOJ 2127 happiness ——网络流

    [题目分析] 基本上是第一次真正的使用最小割的模型. 同时加上一个数然后最后再减去是处理负数的一种方法. 设立出来最小割的模型然后解方程是一件很重要的事情,建议取一个相对来说比较简单的值带入求解. 这 ...

  6. BZOJ 3130 [Sdoi2013]费用流 ——网络流

    [题目分析] 很容易想到,可以把P放在流量最大的边上的时候最优. 所以二分网络流,判断什么时候可以达到最大流. 流量不一定是整数,所以需要实数二分,整数是会WA的. [代码] #include < ...

  7. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 【莫队算法】

    Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...

  8. 洛谷P3758 - [TJOI2017]可乐

    Portal Description 给出一张\(n(n\leq30)\)个点\(m(m\leq100)\)条边的无向图.初始时有一个可乐机器人在点\(1\),这个机器人每秒会做出以下三种行为之一:原 ...

  9. jQuary的相关动画效果

    第一种:该方法隐藏所有 <p> 元素: <html> <head> <script type="text/javascript" src= ...

  10. poj1426 - Find The Multiple [bfs 记录路径]

    传送门 转:http://blog.csdn.net/wangjian8006/article/details/7460523 (比较好的记录路径方案) #include<iostream> ...