zoukankan      html  css  js  c++  java
  • 讲讲 kafka 维护消费状态跟踪的方法?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Java Program!
  • 相关阅读:
    SQL 窗口函数
    时间序列模型(三):指数平滑法
    时间序列模型(二):移动平均法(MA)
    时间序列模型(一):模型概述
    时间序列分析
    分类数据和顺序数据转换为标志变量
    数据标准化
    指数加权移动平均法(EWMA)
    适用于多品种情况的回归控制图
    SQL NOT NULL 约束
  • 原文地址:https://www.cnblogs.com/programb/p/12995989.html
Copyright © 2011-2022 走看看