查询kafka信息,并设置Kafka的偏移量Offset

本文详细介绍Kafka消费组的管理方法,包括登录Kafka、获取消费者信息、查询主题分区情况、设置偏移量等关键操作,以及如何重置消费点位和监控消费状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、登录Kafka,进入Kafka的bin目录下

        --bootstrap-server:Kafka监听的IP和端口

        --topic:指定的topic

        --group:指定的消费组

        --describe:描述

二、获取命令帮助

./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --list --help

三、查询某个kafka的消费者信息

./kafka-consumer-groups.sh --bootstrap-server 10.0.0.198:9092 --list 

四、查询某个topic的分区情况

./kafka-topics.sh --zookeeper 10.0.0.198:2181 --topic alikafka-topic_can_information_statistics --describe
#2.2.0之后
./kafka-topics.sh --bootstrap-server 172.26.10.93:9092 --topic topic.gps --describe

五、获取某个topic的某个分区是由哪个IP消费

./kafka-consumer-groups.sh --bootstrap-server 10.0.0.198:9092 --describe --group CID_VehicleAlarmGroup


六、查看某个消费者对某个topic的消费情况

./kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --group **  --topic **  --zookeeper 10.0.0.198:2181


group 表示group名称;

topic:创建时topic名称;

partition:分区编号;

offset:表示该parition已经消费了多少条message;

logSize:表示该partition已经写了多少条message;

Lag:表示有多少条message没有被消费;

Owner:表示消费者;

Created:该partition创建时间;

Last Seen:消费状态刷新最新时间。

 七、设置Kafka偏移量:

# --to-earliest: 将消费者的偏移量重置为最早的偏移量,即分区中的第一条消息。
# --to-latest: 将消费者的偏移量重置为最新的偏移量,即分区中的最后一条消息。
# --to-current: 将消费者的偏移量重置为当前消费的偏移量,通常用于查看当前消费者的偏移量位置,而不是用于重置。
# --to-offset <offset>: 将消费者的偏移量重置为指定的偏移量。你需要提供具体的偏移量值。
# --shift-by N: 将消费者的偏移量向前或向后移动N个位置。N为正数时向前移动,N为负数时向后移动。
# --to-datetime <datetime>: 将消费者的偏移量重置为大于或等于指定日期时间的最早偏移量。你需要提供符合yyyy-MM-ddTHH:mm:ss.xxx格式的日期时间。
# --by-duration <duration>: 将消费者的偏移量重置为当前时间减去指定时长的位置。例如,P1D表示一天前,P2H表示两小时前。
# --from-file <file>: 从CSV文件中读取重置策略。CSV文件应包含消费者组、主题和分区信息,以及相应的偏移量或时间戳。

./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --group test.group --reset-offsets --topic topic.test --to-earliest --execute

./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --group test.group --reset-offsets --all-topics --to-earliest --execute

在Kafka中,消费者组的状态可以是以下几种之一,只有Inactive才可以重置消费点位

  • Stable:消费者组正在正常消费,没有任何重平衡操作正在进行。
  • Rebalancing:消费者组正在进行重平衡操作,此时不能执行偏移量重置。
  • Joining:新的消费者正在加入消费者组。
  • PreparingRebalance:消费者组即将进行重平衡。
  • Syncing:消费者组正在进行同步操作,通常发生在重平衡之后。

Assignments can only be reset if the group 'xxxx' is inactive, but the current state is Stable  

查询状态 

./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --list --state

需要停止消费服务,如需要重置某个Group(test.group),test.group消费是在test-server中,可以先关闭test-server服务,可以杀进程,用来关闭当前Group的服务的消费进程,不能关闭Kafka,要不然不能设置Offset,之后从新设置offset。

停止服务可以通过设置offset指定消费位置,还有一种方式,直接删除group,这样会直接清理group,也就没有offset了,也能达到重置消费点位的效果

./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --delete --group test.group --execute

八、可以下载一个kafka工具如kafka-tool

### Kafka Offset 的概念与管理 Kafka 中的 Offset 是一个重要的概念,它用于标识消费者在某个分区中的消费位置。每个消息在分区中都有一个唯一的 Offset 值[^1]。Offset 的存储模型是按照 `groupid-topic-partition -> offset` 的方式组织的[^2]。这意味着每个消费者组(Consumer Group)在每个主题(Topic)的每个分区(Partition)上都有一个独立的 Offset 记录。 #### Offset查询与管理 Kafka 支持通过 Offset 查询消息,但不支持直接根据消息键(Key)进行查询[^2]。Offset 的管理经历了从 Zookeeper 到 Kafka 内部存储的变化。早期版本中,Kafka 使用 Zookeeper 存储消费者的消费状态和 Offset 信息[^3]。然而,由于 Zookeeper 的性能限制和潜在的单点问题,新版本的 Kafka 引入了内部的 Group Coordination 协议,减少了对 Zookeeper 的依赖[^3]。 #### Offset 的重置策略 在 Kafka 消费者配置中,`auto.offset.reset` 参数定义了当消费者没有找到对应的 Offset 时的行为[^5]。该参数有三个可选值: - `earliest`:从最早的 Offset 开始消费。 - `latest`:从最新的 Offset 开始消费。 - `none`:抛出异常给消费者。 #### 示例代码:配置 Kafka Consumer 以下是一个使用 Spring Boot 配置 Kafka Consumer 的示例代码[^4]: ```java import org.apache.kafka.clients.consumer.ConsumerConfig; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.kafka.annotation.EnableKafka; import org.springframework.kafka.core.ConsumerFactory; import org.springframework.kafka.core.DefaultKafkaConsumerFactory; import java.util.HashMap; import java.util.Map; @EnableKafka @Configuration public class KafkaConsumerConfig { @Bean public ConsumerFactory<String, String> consumerFactory() { Map<String, Object> config = new HashMap<>(); config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); config.put(ConsumerConfig.GROUP_ID_CONFIG, "test-group"); config.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); config.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); config.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest"); // 设置 Offset 重置策略 return new DefaultKafkaConsumerFactory<>(config); } } ``` #### 解决 Offset 相关问题 如果遇到 Offset 相关的问题,可以尝试以下方法: 1. **Offset 手动提交**:通过手动控制 Offset 提交,确保消费者在正确的时间点提交 Offset[^3]。 2. **Offset 重置**:根据业务需求调整 `auto.offset.reset` 参数的值。 3. **监控工具**:使用 Kafka 自带的工具或第三方监控工具(如 Confluent Control Center)查看 Offset 状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值