Kafka中的Message Delivary机制
学习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机制的更多相关文章
- kafka学习之-文件存储机制
Kafka是什么 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx ...
- Apche Kafka 的生与死 – failover 机制详解
Kafka 作为 high throughput 的消息中间件,以其性能,简单和稳定性,成为当前实时流处理框架中的主流的基础组件. 当然在使用 Kafka 中也碰到不少问题,尤其是 failover ...
- kafka中server.properties配置文件参数说明
转自:http://blog.csdn.net/lizhitao/article/details/25667831 参数 说明(解释) broker.id =0 每一个broker在集群中的唯一表示, ...
- Apche Kafka 的生与死 – failover 机制详解
转自:http://www.cnblogs.com/fxjwind/p/4972244.html Kafka 作为 high throughput 的消息中间件,以其性能,简单和稳定性,成为当前实时流 ...
- Kafka——副本(Replica)机制
副本定义 Kafka 是有主题概念的,而每个主题又进一步划分成若干个分区.副本的概念实际上是在分区层级下定义的,每个分区配置有若干个副本. 所谓副本(Replica),本质就是一个只能追加写消息的提交 ...
- flink---实时项目--day02-----1. 解析参数工具类 2. Flink工具类封装 3. 日志采集架构图 4. 测流输出 5. 将kafka中数据写入HDFS 6 KafkaProducer的使用 7 练习
1. 解析参数工具类(ParameterTool) 该类提供了从不同数据源读取和解析程序参数的简单实用方法,其解析args时,只能支持单只参数. 用来解析main方法传入参数的工具类 public c ...
- Kafka中非常值得学习的优秀设计
一.Kafka基础 消息系统的作用 应该大部份小伙伴都清楚,用机油装箱举个例子 所以消息系统就是如上图我们所说的仓库,能在中间过程作为缓存,并且实现解耦合的作用. 引入一个场景,我们知道中国移动,中国 ...
- javascript中的错误处理机制
× 目录 [1]对象 [2]类型 [3]事件[4]throw[5]try[6]常见错误 前面的话 错误处理对于web应用程序开发至关重要,不能提前预测到可能发生的错误,不能提前采取恢复策略,可能导致较 ...
- 探索 OpenStack 之(17):计量模块 Ceilometer 中的数据收集机制
本文将阐述 Ceilometer 中的数据收集机制.Ceilometer 使用三种机制来收集数据: Notifications:Ceilometer 接收 OpenStack 其它服务发出的 noti ...
随机推荐
- Sqli-labs less 21
Less-21 本关对cookie进行了base64的处理,其他的处理流程和less20是一样的. 我们这里可以利用less20同样的方法,但是需要将payload进行base64编码处理(注意这里对 ...
- React Native 简介:用 JavaScript 搭建 iOS 应用 (1)
[编者按]本篇文章的作者是 Joyce Echessa--渥合数位服务创办人,毕业于台湾大学,近年来专注于协助客户进行 App 软体以及网站开发.本篇文章中,作者介绍通过 React Native 框 ...
- POJ3164 Command Network(最小树形图)
图论填个小坑.以前就一直在想,无向图有最小生成树,那么有向图是不是也有最小生成树呢,想不到还真的有,叫做最小树形图,网上的介绍有很多,感觉下面这个博客介绍的靠谱点: http://www.cnblog ...
- hdu 4768 Flyer 二分
思路:由于最多只有一个是奇数,所以二分枚举这个点,每次判断这个点的左边区间段所有点的和作为 二分的依据. 代码如下: #include<iostream> #include<cstd ...
- error LNK2019: 无法解析的外部符号 ___glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用 1>GEARS.obj : er
转: http://blog.csdn.net/bill_ming/article/details/8150111 opengl的高级菜鸟问题 看了一本书<OpenGL三维图形系统开发与应用技术 ...
- [转载] poll()函数
原地址:http://baike.baidu.com/view/2997591.htm poll()函数:这个函数是某些Unix系统提供的用于执行与select()函数同等功能的函数,下面是这个函 ...
- Windows X64 Patch Guard
先简单介绍下PatchGuard ,摘自百度百科 PatchGuard就是Windows Vista的内核保护系统,防止任何非授权软件试图“修改”Windows内核,也就是说,Vista内核的新型金钟 ...
- 【重走Android之路】【路线篇(一)】路线图
总结归纳了J2SE和Android的知识点,自己制订了一套详细的路线图,其中肯定有考虑不全和不合适的地方,欢迎各位大牛批评指正. 详细路线图如下:
- Linux下Websphere无法关闭
Websphere 启动关闭命令 linux 下首先查看进程 ./stopServcer.sh server1如果停不掉websphere服务.则强制杀掉其进程! 1.查看websphere进程号b ...
- Linux命令-grep
grep命令用于对文本进行搜索,格式为“grep [选项] [文件]” 搜索某个关键词:"grep 关键词 文本文件" 参数说明 -b 将可执行文件当做文本文件来搜索 -c 仅显示 ...