美文网首页
kafka消息消费总结

kafka消息消费总结

作者: morning_king | 来源:发表于2019-12-20 23:30 被阅读0次

    坑s

    关于消费终止

    1. 对于消息流来说,由于其中的一个消息处理异常导致该条消息失败,同时无法继续消费后续消息流;
    2. kafkaliveLock的概念,如果消费端在sessionTimeout时间段内没有poll消息,kafka会认为其挂掉了,然后释放其持有的partition?然而其他消费端拿到patition后依然会消费失败?
    3. 消费失败的原因是什么?(逻辑问题还是非逻辑问题),如果是非逻辑问题那么肯定需要支持重试,如果是逻辑问题那么重试也没用;
    4. 消费失败后如果把该条消息存起来,然后略过该消息去消费后面的消息,那么可能会面临消费顺序的问题(可能有)以及手动补偿的问题;

    关于重复消费

    1. 目前kafka-client的偏移量提交都是批量提交本次pollmaxPollRecord条消息;
    2. 不论是commitSynccommitAsync,都会存在从kafka拉取一批数据maxPollRecord,只消费成功了一部分数据,之后崩掉没commit的情况,然后下次又会重复消费上一次消费成功的消息;
    3. 要避免重复消费,可以考虑拉一批回来,消费时在同一事务(maxPollRecord不可太大,否则大事务);或者maxPollRecord=1,事务性的消费(提交偏移量需要在事务内);
    4. 或者避免不了重复消费,需要保证重复消费时的幂等性(记录消费成功的消息【最好有一个唯一主键,关于唯一主键的生成...】);

    关于重复消费消费终止

    1. 如果消费终止,并且maxPollRecord>1,那么很大可能性就会存在重复消费的问题;
    2. 如果不消费终止,那么就需要有补偿机制,并且需要记下日志,方便后续的补偿;

    关于消费场景的问题

    1. 对于消费顺序和消息依赖没有要求的消费端:
      • 对于消息丢失可以容忍的场景(后续查询时强制刷新),可以忽略该条消息;
      • 对于消息丢失无法容忍的场景,且不希望消息终止,那么需要吞掉消费时的异常,不过需要注意的是,这种情况需要记录消费成功的消息状态、记录消费失败的消息详情,同时针对消费失败的消息详情,需要有补偿措施;
    2. 对于消费顺序和消息依赖有要求的消费端:消息顺序分全局有序和分区有序,或者需要等待前面的消息消费完毕后才能消费后面的消息。这两类情况只能等待当前消息消费成功,如果消费异常了,那么需要等待其消费成功(对于非逻辑错误可以考虑重试,如果为逻辑错误那么只能等待修复该bug);

    相关文章

      网友评论

          本文标题:kafka消息消费总结

          本文链接:https://www.haomeiwen.com/subject/yeswnctx.html