学习Kafka的读书笔记,暂未把文章设为翻译类型,因为并非直译文档。水平有限,还请路过高手指正。

<1> “最多(发送)一次”(At most once):消息可以丢失但绝不会重新发送;
<2> “至少(发送)一次”(At least once):消息绝不会丢失但是可能会被重新发送;
<3> “仅(发送)一次”(Exactly once): 这是实际应用中最希望看到的,每个消息只会被发送一次且不会丢失;

从生产者角度,一个producer可以选择是否异步发送:
1> 若不选择异步发送,Producer在发送一个消息之后得不到及时ack的话,会继续重发,知道得到ack为止;(至少(发送)一次)
2> 若选择异步发送,Producer在发送一个message后就继续接下来的消息发送,而不管消息是否最终发送成功;(最多(发送)一次)

从消费者角度,一个Kafka Consumer有三种选择:
1> 读取N条消息(一批消息) ---> 保存最后一个消息之后要处理的Message Possition至log ---> 处理消息。 该流程保证“最多(发送)一次”:如果保存消息Position成功,但在处理消息完成前Consumer crash, 新的Consumer进程将从记录的position继续往下处理,因而有消息会被漏掉(未经处理).
2> 读取N条消息 (一批消息)---> 处理消息 ---> 记录最后一个消息之后要处理的Message Possition至log。 该流程保证“至少(发送)一次”:如果处理消息过程中consumer crash, 新的consumer进程在接管时会从上一次处理的末尾Position开始,一些消息可能会被重发发送。
3> 处理消息过程中,将每个消息的Position和消息本身存放在同一地方,要么Position和Message都update, 要么都没有。该流程可保证“仅(发送)一次”。当某个消息处理失败(Consumer挂掉),新的Consumer进程可以通过最后一个处理的Message position保证不会重复处理消息。

总的来说,Kafka默认支持“至少(发送)一次”;

如果用户希望支持“最多(发送)一次”,可以在producer端选择异步发送(关闭retry功能),并且在处理一个批次消息前先记录该批次消息最后一个消息的Position。

若要实现“仅(发送)一次”,Kafka提供了Message Offset, Consumer可以同步保存每个消息的Offset和Message本身,所以实现“仅(发送)一次”比较方便。

Push vs Pull:

Push model不能适应不同消费者的消费能力和使用场景。理解起来很简单,消费者A每分钟只能处理10条消息,但Broker可能以每分钟100条的速率发送给A,这显然不合理。
Pull-based model可以由消费者根据自身的处理能力选择性的批处理消息,可以减少不必要的延迟产生(每次通过网络发送一个消息,会有会话延迟)

Kafka中的Message Delivary机制的更多相关文章

  1. kafka学习之-文件存储机制

    Kafka是什么 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx ...

  2. Apche Kafka 的生与死 – failover 机制详解

    Kafka 作为 high throughput 的消息中间件,以其性能,简单和稳定性,成为当前实时流处理框架中的主流的基础组件. 当然在使用 Kafka 中也碰到不少问题,尤其是 failover ...

  3. kafka中server.properties配置文件参数说明

    转自:http://blog.csdn.net/lizhitao/article/details/25667831 参数 说明(解释) broker.id =0 每一个broker在集群中的唯一表示, ...

  4. Apche Kafka 的生与死 – failover 机制详解

    转自:http://www.cnblogs.com/fxjwind/p/4972244.html Kafka 作为 high throughput 的消息中间件,以其性能,简单和稳定性,成为当前实时流 ...

  5. Kafka——副本(Replica)机制

    副本定义 Kafka 是有主题概念的,而每个主题又进一步划分成若干个分区.副本的概念实际上是在分区层级下定义的,每个分区配置有若干个副本. 所谓副本(Replica),本质就是一个只能追加写消息的提交 ...

  6. flink---实时项目--day02-----1. 解析参数工具类 2. Flink工具类封装 3. 日志采集架构图 4. 测流输出 5. 将kafka中数据写入HDFS 6 KafkaProducer的使用 7 练习

    1. 解析参数工具类(ParameterTool) 该类提供了从不同数据源读取和解析程序参数的简单实用方法,其解析args时,只能支持单只参数. 用来解析main方法传入参数的工具类 public c ...

  7. Kafka中非常值得学习的优秀设计

    一.Kafka基础 消息系统的作用 应该大部份小伙伴都清楚,用机油装箱举个例子 所以消息系统就是如上图我们所说的仓库,能在中间过程作为缓存,并且实现解耦合的作用. 引入一个场景,我们知道中国移动,中国 ...

  8. javascript中的错误处理机制

    × 目录 [1]对象 [2]类型 [3]事件[4]throw[5]try[6]常见错误 前面的话 错误处理对于web应用程序开发至关重要,不能提前预测到可能发生的错误,不能提前采取恢复策略,可能导致较 ...

  9. 探索 OpenStack 之(17):计量模块 Ceilometer 中的数据收集机制

    本文将阐述 Ceilometer 中的数据收集机制.Ceilometer 使用三种机制来收集数据: Notifications:Ceilometer 接收 OpenStack 其它服务发出的 noti ...

随机推荐

  1. VSync Count 垂直同步

    原地址:http://blog.csdn.net/yesy10/article/details/7794556 Unity3D中新建一个场景空的时候,帧速率(FPS总是很低),大概在60~70之间.一 ...

  2. Unity3D 将 Unity 嵌入WPF中的一些研究笔记

     一. 在 WPF 中使用 WebBrowser,直接打开 WebPlayer.html 以这种方式有一个问题是. 无法在 WebBrowser 的上面 放置其它的控件, 在运行时,都不会显示 . 以 ...

  3. BZOJ1191: [HNOI2006]超级英雄Hero

    这题标解是改一下匈牙利算法,显然,像我这种从不用匈牙利的人,会找个办法用网络流… 具体做法是这样,二分最后的答案ans,然后对前ans个问题建图跑网络流,看最大流能不能到ans. /********* ...

  4. HDU2295 Radar (DLX)

    下面的代码99%参考了这个网站http://www.cnblogs.com/183zyz/archive/2011/08/07/2130193.html 人生的第一道DLX肯定是需要作一些参考的啦. ...

  5. 【剑指offer】题目38 数字在排序数组中出现的次数

    思路: 应该是用二分查找分别找到该数字第一次和最后一次出现的位置,相减即可.O(logn) int findLeft(int a[], int n, int num) { , r = n - ; wh ...

  6. POJ 1411

    #include<iostream> #include<stdio.h> #include<math.h> #define MAXN 50000 using nam ...

  7. SVN用法(merge,branch,switch)

    SVN merge命令用法 使用svn的merge命令,把一个版本的变化合并到另一个版本.我使用的tortoise,在当前的工作目录点击右键,选择merge,在from框输入源url,在revisio ...

  8. (1)opengl-nehe 4种框架

    http://www.yakergong.net/nehe/ 这个网站还是opengl方面比较权威的,作者叫nehe 这东西估计是要先装个ndk,然后才能运行代码 先睡觉! 以下内容参考自http:/ ...

  9. poj 1797(最短路变形)

    题目链接:http://poj.org/problem?id=1797 思路:题目意思很简单,n个顶点,m条路,每条路上都有最大载重限制,问1->n最大载重量.其实就是一最短路的变形,定义wei ...

  10. excel设置下拉菜单,并且不同值会显示不同颜色

    工作中常常要用的excel,每次都会有新的需求,然后不会,然后百度,然后过段时间可能就又忘了,于是就想说,自己记录下来~~~因为自己用的都是2010,其实哪个版本都差不多,都是应该可以找到相应的按钮滴 ...