大部分消息系统在 broker 端的维护消息被消费的记录:一个消息被分发到

consumer 后 broker 就马上进行标记或者等待 customer 的通知后进行标记。这

样也可以在消息在消费后立马就删除以减少空间占用。

但是这样会不会有什么问题呢?如果一条消息发送出去之后就立即被标记为消费

过的,一旦 consumer 处理消息时失败了(比如程序崩溃)消息就丢失了。为了

解决这个问题,很多消息系统提供了另外一个个功能:当消息被发送出去之后仅

仅被标记为已发送状态,当接到 consumer 已经消费成功的通知后才标记为已被

消费的状态。这虽然解决了消息丢失的问题,但产生了新问题,首先如果 consumer

处理消息成功了但是向 broker 发送响应时失败了,这条消息将被消费两次。第二

个问题时,broker 必须维护每条消息的状态,并且每次都要先锁住消息然后更改

状态然后释放锁。这样麻烦又来了,且不说要维护大量的状态数据,比如如果消

息发送出去但没有收到消费成功的通知,这条消息将一直处于被锁定的状态,

Kafka 采用了不同的策略。Topic 被分成了若干分区,每个分区在同一时间只被一

个 consumer 消费。这意味着每个分区被消费的消息在日志中的位置仅仅是一个

简单的整数:offset。这样就很容易标记每个分区消费状态就很容易了,仅仅需要

一个整数而已。这样消费状态的跟踪就很简单了。

页这带来了另外一个好处:consumer 可以把 offset 调成一个较老的值,去重新消

费老的消息。这对传统的消息系统来说看起来有些不可思议,但确实是非常有用

的,谁规定了一条消息只能被消费一次呢?

讲讲 kafka 维护消费状态跟踪的方法?的更多相关文章

  1. 5种kafka消费端性能优化方法

    摘要:带你了解基于FusionInsight HD&MRS的5种kafka消费端性能优化方法. 本文分享自华为云社区<FusionInsight HD&MRSkafka消费端性能 ...

  2. kafka生产消费原理笔记

    一.什么是kafka Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性 ...

  3. kafka多线程消费及处理和手动提交处理方案设计[转]

    转自:http://blog.csdn.net/haoyifen/article/details/54692503 kafka与其他消息队列不同的是, kafka的消费者状态由外部( 消费者本身或者类 ...

  4. kafka多线程消费

    建立kafka消费类ConsumerRunnable ,实现Runnable接口: import com.alibaba.fastjson.JSON; import com.alibaba.fastj ...

  5. Kafka重复消费和丢失数据研究

    Kafka重复消费原因 底层根本原因:已经消费了数据,但是offset没提交. 原因1:强行kill线程,导致消费后的数据,offset没有提交. 原因2:设置offset为自动提交,关闭kafka时 ...

  6. 转载Entity Framework 5.0(EF first)中的添加,删除,修改,查询,状态跟踪操作

    转载原出处:http://www.cnblogs.com/kenshincui/p/3345586.html Entity Framework将概念模型中定义的实体和关系映射到数据源,利用实体框架可以 ...

  7. Entity Framework 第五篇 状态跟踪

    本人建议尽量使用EntityState来表名Entry的状态,而不要使用Configuration.AutoDetectChangesEnabled自动状态跟踪,为什么我这么建议呢?他们到底有什么异同 ...

  8. Flume简介与使用(三)——Kafka Sink消费数据之Kafka安装

    前面已经介绍了如何利用Thrift Source生产数据,今天介绍如何用Kafka Sink消费数据. 其实之前已经在Flume配置文件里设置了用Kafka Sink消费数据 agent1.sinks ...

  9. SVN 不显示状态图标--解决方法

    [SVN 不显示状态图标--解决方法] 在名字前面加空格, 三个六个空格随意: 参考:https://www.cnblogs.com/lzpong/p/6187366.html

随机推荐

  1. python开启httpserver

  2. 2021年都要过去啦,你还在用Excel做数据可视化效果吗?

    2021年都要过去啦,你还在用Excel做数据可视化效果吗?古语有云,"工欲善其事,必先利其器",没有专业的工具,前期准备的再好也是白搭.现在运用数据可视化工具于经营活动中的企业是 ...

  3. 实力再获认可!Smartbi入选爱分析·产业数字化厂商全景报告

    近日,中国独立的第三方产业数字化研究与咨询机构--爱分析发布<2021爱分析·产业数字化厂商全景报告>.思迈特软件凭借优秀的解决方案能力及丰富的业务实践经验,入选报告中银行数字化.保险数字 ...

  4. Spring 5 , 狭义上的spring 以及 广义上的spring , spring 设计模式

    Spring 5 距离 Spring4 发布有4年多, 所以说Spring 5是一个重要的版本 要构建和运行Spring 5应用程序, 至少需要Java EE 7 和JDK 8 , 之前的JDK和Ja ...

  5. html 多种空格转义字符

     记录一下,空格的转义字符分为如下几种: 1.  &160#;不断行的空白(1个字符宽度) 2.  &8194#;半个空白(1个字符宽度) 3.  &8195#;一个空白(2个 ...

  6. Java课程设计---删除学生

    1.界面已经在上次修改操作的过程添加完成 2.在StudentDao中添加删除方法 public boolean delete(int id) throws SQLException { DbUtil ...

  7. Linux|常用命令|sed

    目录 SED的适用场景 Option Action作用的行范围 Action类型:行的增删改查 增 删 改 查 正则Regular Expression SED的适用场景 SED是Stream EDi ...

  8. c语言 排序(转)

    https://blog.csdn.net/Galaxy_n/article/details/116742537

  9. 任意文件夹打开CMD命令窗口

    1:打开任意文件夹 2:按住Shift键,鼠标右键单击 3:该文件夹下的命令窗口已打开,方便快捷

  10. LeetCode-061-旋转链表

    旋转链表 题目描述:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置. 示例说明请见LeetCode官网. 来源:力扣(LeetCode) 链接:https://leet ...