什么是offset

前面在讲解partition的时候,提到过offset, 每个topic可以划分多个分区(每个Topic至少有一个分区),同一topic下的不同分区包含的消息是不同的。每个消息在被添加到分区时,都会被分配一个offset(称之为偏移量),它是消息在此分区中的唯一编号,kafka通过offset保证消息在分区内的顺序,offset的顺序不跨分区,即kafka只保证在同一个分区内的消息是有序的; 对于应用层的消费来说,每次消费一个消息并且提交以后,会保存当前消费到的最近的一个offset。那么offset保存在哪里?

offset在哪里维护?

在kafka中,提供了一个consumer_offsets_* 的一个topic,把offset信息写入到这个topic中。consumer_offsets——按保存了每个consumer group某一时刻提交的offset信息。__consumer_offsets 默认有50个分区。

根据前面我们演示的案例,我们设置了一个KafkaConsumerDemo的groupid。首先我们需要找到这个consumer_group保存在哪个分区中

properties.put(ConsumerConfig.GROUP_ID_CONFIG,"KafkaConsumerDemo");

计算公式

Math.abs(“groupid”.hashCode())%groupMetadataTopicPartitionCount ; 由于默认情况下groupMetadataTopicPartitionCount有50个分区,计算得到的结果为:35, 意味着当前的consumer_group的位移信息保存在__consumer_offsets的第35个分区

执行如下命令,可以查看当前consumer_goup中的offset位移提交的信息

kafka-console-consumer.sh --topic __consumer_offsets --partition 15 --
bootstrap-server 192.168.13.102:9092,192.168.13.103:9092,192.168.13.104:9092
--formatter
'kafka.coordinator.group.GroupMetadataManager$OffsetsMessageFormatter'

从输出结果中,我们就可以看到test这个topic的offset的位移日志

如何保存消费端的消费位置相关推荐

  1. java如何保证mq一定被消费_消费端如何保证消息队列MQ的有序消费

    消息无序产生的原因 消息队列,既然是队列就能保证消息在进入队列,以及出队列的时候保证消息的有序性,显然这是在消息的生产端(Producer),但是往往在生产环境中有多个消息的消费端(Consumer) ...

  2. 消息中间件--RabbitMQ ---高级特性之消费端ACK与重回队列

    什么是消费端的ACK和重回队列? 消费端的手工ACK和NACK 消费端进行消费的时候,如果由于业务异常我们可以进行日志的记录,然后进行补偿 如果由于服务器宕机等严重问题,那我们就需要手工进行ACK保障 ...

  3. RabbitMQ消费端消费机制

    一.确认机制 第一种 public static void getMessage() throws Exception {Connection connection = ConnectionUtil. ...

  4. RocketMQ:消费端的消息消息队列负载均衡与重新发布机制源码解析

    文章目录 前言 流程解析 总结 前言 在上一篇博客中我们了解到,PullMessageService线程主要是负责从pullRequestQueue中获得拉取消息请求并进行请求处理的. PullMes ...

  5. SpringCloud 配置安全验证、服务消费端处理、无状态 Session 配置、定义公共安全配置程序类

    所有的 Rest 服务最终都是暴露在公网上的,也就是说如果你的 Rest 服务属于一些你自己公司的私人业务,这样的结果会直接 导致你信息的泄漏,所以对于 Rest 访问,安全性是首要的因素. 2.1. ...

  6. mq补偿机制java代码_RocketMQ源码分析之消息消费机制-消费端消息负载均衡机制与重新分布 - Java 技术驿站-Java 技术驿站...

    1.消息消费需要解决的问题 首先再次重复啰嗦一下RocketMQ消息消费的一些基本元素的关系 主题 ---> 消息队列(MessageQueue) 1 对多 主题 ----> 消息生产者, ...

  7. 面试官:说说RabbitMQ 消费端限流、TTL、死信队列

    欢迎关注方志朋的博客,回复"666"获面试宝典 1. 为什么要对消费端限流 假设一个场景,首先,我们 Rabbitmq 服务器积压了有上万条未处理的消息,我们随便打开一个消费者客户 ...

  8. RabbitMQ(八):SpringBoot 整合 RabbitMQ(三种消息确认机制以及消费端限流)

    说明 本文 SpringBoot 与 RabbitMQ 进行整合的时候,包含了三种消息的确认模式,如果查询详细的确认模式设置,请阅读:RabbitMQ的三种消息确认模式 同时消费端也采取了限流的措施, ...

  9. RabbitMQ(七):RabbitMQ 消费端限流、TTL、死信队列是什么?

    消费端限流 1. 为什么要对消费端限流 假设一个场景,首先,我们 Rabbitmq 服务器积压了有上万条未处理的消息,我们随便打开一个消费者客户端,会出现这样情况: 巨量的消息瞬间全部推送过来,但是我 ...

最新文章

  1. argparse库 学习记录
  2. 百度运营专家:互联网运营必读书目(实用推荐)
  3. Team Foundation Server 2010 安装、部署与配置(三):安装 .
  4. Python实现中英文混排时行号对齐
  5. 突然发现foxmail原来是腾讯的
  6. 被裁员和降薪,你选哪个?
  7. 通过LINQ表达式树动态构建查询条件
  8. 龙虎斗 详解(C++)
  9. 10款硬盘数据恢复软件推荐
  10. 克拉默法则(Cramer's Rule)的证明
  11. c#文件排序和文件夹排序
  12. MyEclipse配置jdk
  13. 从零开始的unity2017笔记【2D】(【二】角色动画)
  14. Win2000请求拨号路由服务详解
  15. python求两数最大公因数_使用辗转相除法求两个数的最大公因数(python实现)
  16. CSP202109-4 收集卡牌
  17. 整体大于部分_Redis典型应用场景实战之抢红包系统整体业务流程分析赠书
  18. 我的/etc/motd 卡哇伊内~
  19. 外汇平台哪个比较好 2017年排行总结 Flyerinternational稳居前五
  20. 高斯判别分析(GDA)

热门文章

  1. IDEA JRebel热部署插件免费使用方法
  2. C++程序设计方法3:强制类型转换
  3. IIS上的web service调用AX服务问题
  4. 【转】全排列算法非递归实现和递归实现
  5. linux c 系统调用
  6. C# StatusStrip状态栏 例程
  7. MyBatis自定义类型处理器 TypeHandler
  8. java跳出指定循环
  9. 手机浏览器无法获取COOKIE的原因
  10. 美国读本科出勤率低被休学,无法毕业怎么办