当前位置: 首页 > wzjs >正文

网站尾部新站快速收录

网站尾部,新站快速收录,微网站功能列表,网站接单做项目#作者:张桐瑞 文章目录 一、Kafka 与传统消息引擎的核心差异二、重设消费者组位移的核心原因三、重设位移的两大维度与七种策略四、重设位移的实现方式(一)Java API 方式(二)命令行脚本方式(Kafka 0.11&am…

#作者:张桐瑞

文章目录

  • 一、Kafka 与传统消息引擎的核心差异
  • 二、重设消费者组位移的核心原因
  • 三、重设位移的两大维度与七种策略
  • 四、重设位移的实现方式
    • (一)Java API 方式
    • (二)命令行脚本方式(Kafka 0.11+)
  • 五、注意事项

一、Kafka 与传统消息引擎的核心差异

特性Kafka传统消息引擎(如 RabbitMQ、ActiveMQ)
消息处理方式基于日志结构,只读不删除,支持消息重演破坏性处理,成功消费后删除消息
位移控制消费者自主控制位移,可灵活修改实现重复消费由中间件自动管理,通常无法回溯
适用场景高吞吐量、低单消息处理耗时、强顺序性要求复杂消息处理逻辑、弱顺序性要求

二、重设消费者组位移的核心原因

  1. 重复消费历史数据
    1)修正消费逻辑错误后,需要重新处理历史消息。
    2)业务需求变更(如数据重新计算、补写下游存储)。
  2. 跳过异常消息
    1)处理 corrupted 消息或消费逻辑抛出异常时,通过指定位移跳过无效消息。
  3. 动态调整消费进度
    2)基于时间维度(如消费近 30 分钟数据)或位移维度(如从最新 / 最早位置开始)灵活调整消费起点。
  4. 回滚消费进度
    1)代码变更失败后,需回滚到历史位移继续消费。

三、重设位移的两大维度与七种策略

(一)位移维度策略

策略说明典型场景
Earliest重置到主题当前最早位移(可能大于 0,受日志保留策略影响)重新消费主题所有可保留的历史消息
Latest重置到主题最新末端位移跳过所有历史消息,从最新消息开始消费
Current重置到消费者当前提交的最新位移回滚代码变更后,恢复到重启前的消费位置
Specified-Offset指定绝对位移值手动跳过某条异常消息(如位移 1234)
Shift-By-N指定相对位移偏移量(N 可正可负)向前跳过 100 条(N=-100)或向后跳过 50 条(N=50)

(二)时间维度策略

策略说明格式要求典型场景
DateTime重置到指定时间之后的最小位移YYYY-MM-DDTHH:mm:ss.SSS(如2023-10-01T12:00:00.000)重新消费昨天 0 点之后的数据
Duration重置到相对当前时间的间隔位移符合 ISO-8601 的PnDTnHnMnS(如PT15M表示 15 分钟前)消费 30 分钟前的所有消息

四、重设位移的实现方式

(一)Java API 方式

核心方法

方法作用
seek(TopicPartition partition, long offset)为单个分区设置绝对位移
seekToBeginning(Collection<TopicPartition> partitions)将多个分区重置到最早位移
seekToEnd(Collection<TopicPartition> partitions)将多个分区重置到最新位移
offsetsForTimes(Map<TopicPartition, Long> timestamps)根据时间戳查找对应的位移

示例代码

  1. Earliest 策略
Properties props = new Properties();
props.put(ConsumerConfig.GROUP_ID_CONFIG, "test-group");
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
try (KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props)) {consumer.subscribe(Collections.singleton("test-topic"));consumer.poll(0); // 触发元数据更新List<TopicPartition> partitions = consumer.partitionsFor("test-topic").stream().map(info -> new TopicPartition(info.topic(), info.partition())).collect(Collectors.toList());consumer.seekToBeginning(partitions); // 重置所有分区到最早位移
}
  1. DateTime 策略(重设到 2023-10-01 12:00:00)
long timestamp = LocalDateTime.of(2023, 10, 1, 12, 0).toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
Map<TopicPartition, Long> timeMap = consumer.partitionsFor("test-topic").stream().map(info -> new TopicPartition(info.topic(), info.partition())).collect(Collectors.toMap(tp -> tp, tp -> timestamp));
Map<TopicPartition, OffsetAndTimestamp> offsets = consumer.offsetsForTimes(timeMap);
offsets.forEach((tp, oa) -> consumer.seek(tp, oa.offset()));

(二)命令行脚本方式(Kafka 0.11+)

bin/kafka-consumer-groups.sh --bootstrap-server <broker地址> --group <消费组名> --reset-offsets [策略参数] --execute
策略	命令示例
Earliest	--to-earliest
Latest	--to-latest
Current	--to-current
Specified-Offset	--to-offset 1234
Shift-By-N	--shift-by -100(向前跳 100 条)
DateTime	--to-datetime "2023-10-01T12:00:00.000"
Duration	--by-duration PT30M(30 分钟前)

五、注意事项

  1. 消费组状态
    1)重设位移时,确保消费组未处于运行状态,避免位移冲突。
  2. 日志保留策略
    1)Earliest策略受log.retention.hours等配置限制,可能无法重置到 0 位移。
  3. 分区分配
    1)API 方式需显式处理所有分区(如通过partitionsFor获取分区列表),避免遗漏。
  4. 事务性消息
    1)若消费事务性主题,需结合isolation.level=read_committed确保一致性。
http://www.dtcms.com/wzjs/836234.html

相关文章:

  • 重庆网站排名优化教程软件工程项目管理
  • 百姓网免费发布信息平台seo教程技术优化搜索引擎
  • 修改图片网站网站收录量低怎么做
  • 律师个人网站源码微信电影网站建设教程
  • 网站建设与建设怎么配置wordpress
  • 网络商城网站建设自学织梦做网站要多久
  • 用lamp搭wordpress官网seo怎么做
  • 网站建设需要哪些必备文件ps软件下载安装
  • 腾讯云动态加速WordPress广东企业网站seo哪里好
  • 教育网站模块建设百度手机网站制作
  • 信息发布型网站哪个网站找住宿的便宜
  • 企业网站源码 html郑州经济技术开发区建设局
  • 建设人才证书查询网站长沙网页设计有哪些
  • 湖北省住建厅网站官网赣州市建设培训网
  • 教学网站制作治疗腰椎间盘突出的特效药
  • 网站首页是什么意思wordpress修改默认头像
  • 做宝宝衣服的网站用动物做网站名
  • 建设信用卡银行商城网站刚做的网站在百度上搜不到
  • 免费数据网站网站科技感页面设计
  • 网站访问统计js代码开什么网站暴利
  • dw做网站环境配置wordpress去除右下角
  • 网站缓存实例淄博网站推广公司
  • 长沙网站制作作网站建设与规划结论
  • 郑州营销型网站制作运营请人做外贸网站应注意什么问题
  • 注册网站建设公司主营项目类别wordpress 文章 按钮
  • 做网站架构需要什么步骤网站开发 附加协议
  • 外贸公司网站建设需要注意电脑制作ppt的软件叫什么
  • 爱做网站北京seo代理公司
  • 手机网站设计费用重庆在线高校开放课程平台登录
  • 成功的wordpress网站青岛城阳 软件网站开发