讲讲 kafka 维护消费状态跟踪的方法?
大部分消息系统在 broker 端的维护消息被消费的记录:一个消息被分发到
consumer 后 broker 就马上进行标记或者等待 customer 的通知后进行标记。这
样也可以在消息在消费后立马就删除以减少空间占用。
但是这样会不会有什么问题呢?如果一条消息发送出去之后就立即被标记为消费
过的,一旦 consumer 处理消息时失败了(比如程序崩溃)消息就丢失了。为了
解决这个问题,很多消息系统提供了另外一个个功能:当消息被发送出去之后仅
仅被标记为已发送状态,当接到 consumer 已经消费成功的通知后才标记为已被
消费的状态。这虽然解决了消息丢失的问题,但产生了新问题,首先如果 consumer
处理消息成功了但是向 broker 发送响应时失败了,这条消息将被消费两次。第二
个问题时,broker 必须维护每条消息的状态,并且每次都要先锁住消息然后更改
状态然后释放锁。这样麻烦又来了,且不说要维护大量的状态数据,比如如果消
息发送出去但没有收到消费成功的通知,这条消息将一直处于被锁定的状态,
Kafka 采用了不同的策略。Topic 被分成了若干分区,每个分区在同一时间只被一
个 consumer 消费。这意味着每个分区被消费的消息在日志中的位置仅仅是一个
简单的整数:offset。这样就很容易标记每个分区消费状态就很容易了,仅仅需要
一个整数而已。这样消费状态的跟踪就很简单了。
页这带来了另外一个好处:consumer 可以把 offset 调成一个较老的值,去重新消
费老的消息。这对传统的消息系统来说看起来有些不可思议,但确实是非常有用
的,谁规定了一条消息只能被消费一次呢?
讲讲 kafka 维护消费状态跟踪的方法?的更多相关文章
- 5种kafka消费端性能优化方法
摘要:带你了解基于FusionInsight HD&MRS的5种kafka消费端性能优化方法. 本文分享自华为云社区<FusionInsight HD&MRSkafka消费端性能 ...
- kafka生产消费原理笔记
一.什么是kafka Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性 ...
- kafka多线程消费及处理和手动提交处理方案设计[转]
转自:http://blog.csdn.net/haoyifen/article/details/54692503 kafka与其他消息队列不同的是, kafka的消费者状态由外部( 消费者本身或者类 ...
- kafka多线程消费
建立kafka消费类ConsumerRunnable ,实现Runnable接口: import com.alibaba.fastjson.JSON; import com.alibaba.fastj ...
- Kafka重复消费和丢失数据研究
Kafka重复消费原因 底层根本原因:已经消费了数据,但是offset没提交. 原因1:强行kill线程,导致消费后的数据,offset没有提交. 原因2:设置offset为自动提交,关闭kafka时 ...
- 转载Entity Framework 5.0(EF first)中的添加,删除,修改,查询,状态跟踪操作
转载原出处:http://www.cnblogs.com/kenshincui/p/3345586.html Entity Framework将概念模型中定义的实体和关系映射到数据源,利用实体框架可以 ...
- Entity Framework 第五篇 状态跟踪
本人建议尽量使用EntityState来表名Entry的状态,而不要使用Configuration.AutoDetectChangesEnabled自动状态跟踪,为什么我这么建议呢?他们到底有什么异同 ...
- Flume简介与使用(三)——Kafka Sink消费数据之Kafka安装
前面已经介绍了如何利用Thrift Source生产数据,今天介绍如何用Kafka Sink消费数据. 其实之前已经在Flume配置文件里设置了用Kafka Sink消费数据 agent1.sinks ...
- SVN 不显示状态图标--解决方法
[SVN 不显示状态图标--解决方法] 在名字前面加空格, 三个六个空格随意: 参考:https://www.cnblogs.com/lzpong/p/6187366.html
随机推荐
- 关于 Xcode 更新 appleID 更换
可能不少人会遇到 前一位同事走之后,他的 appID帐号下载的东西更新不了 下面给予大家一个解决办法 例如 Xcode 1.打开引用程序目录 2.找到Xcode,右键"显示包内容&quo ...
- 学着去看开 你不是一个low程序员
http://www.cocoachina.com/programmer/20160627/16835.html 看完这篇文章 感谢作者
- python3发微信脚本
企业微信发微信脚本 #!/usr/bin/env python # -*- coding: utf-8 -*- #GuoYabin import requests,json,sys,imp imp.r ...
- 最近好忙 (没有)35讲GUI
0: g.integerbox 表示只输入整数的对话框 1:. g.multenterbox 用来表示多个输入框. import easygui as g msg = "请填写以下联系方式& ...
- ISISv4协议测试——网络测试仪实操
文章关键词 ISIS协议:路由协议:协议测试: 一.文章简介: isis是一种与ospf很相似的网络协议(属于动态路由协议),它被应用在巨大规模网络,如运营商以及银行等.同样的它也是基于链路状态算法, ...
- 60天shell脚本计划-4/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月11日 --修改时间:2021年2月15日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- ImageNet2017文件介绍及使用
ImageNet2017文件介绍及使用 文件说明 imagenet_object_localization.tar.gz包含训练集和验证集的图像数据和地面实况,以及测试集的图像数据. 图像注释以PAS ...
- Codeforces Round #773 (Div. 2)D,E
D. Repetitions Decoding 传送门 题目大意: 一个长为 n ( n 2 ≤ 250000 ) n(n^2\leq250000) n(n2≤250000)的序列,每个元素 a i ...
- Django的models由数据库表生成
Django的models由数据库表生成 参考文献:https://www.cnblogs.com/sukura/p/14306510.html 目的或效果:方便实现使用django原生的后台管理系统 ...
- dedeCMS自定义dede标签
在include/taglib文件夹中新建文件hlh.lib.php,其中hlh也就是你标签的名字,function的名字也必须跟文件名对应,固定格式lib_标签名,如lib_hlh,本例子以调取文章 ...