Kafka 消息消费工具(从特定时间戳开始消费)
Kafka消息消费工具使用说明文档
脚本概述
由于Kafka无法直接根据时间戳过滤查询,因此,开发了一个shell脚本,先根据时间戳查询出各个分区中对应的偏移量是多少,然后根据每个分区的偏移量进行消费,实现过滤查询,同时支持消息内容的模糊检索,比如我的这个脚本名称是kafka_consumer.sh,我现在要查询TOPIC名称为:TOPIC_TEST的1764175200000这个时间后的数据并只将这部分数据中包含 ‘已上报’ 字符串的内容输出,只需要执行 ./kafka_consumer.sh TOPIC_TEST timestamp=1764175200000 search_str='已上报' 即可。
基本功能
- ✅ 消费指定Topic的消息
- ✅ 从特定时间戳开始消费
- ✅ 消息内容模糊搜索
- ✅ 多分区并行消费
- ✅ 彩色输出和友好提示
环境要求
系统要求
- Linux/Unix 系统
- Bash 4.0+
Kafka要求
-
Kafka 2.12+ 版本
-
需要以下脚本文件:
kafka-console-consumer.shkafka-get-offsets.sh(用于时间戳功能)
配置说明
脚本配置变量
bash
BOOTSTRAP_SERVER="192.168.1.1:9092" # Kafka集群地址
KAFKA_BIN_PATH="/data/kafka/kafka_2.12-3.8.0/bin" # Kafka二进制文件路径
使用方法
1. 基础用法 - 从头消费整个Topic
bash
./kafka_consumer.sh TOPIC_TEST
2. 从指定时间戳开始消费
bash
# 从特定时间戳(毫秒)开始消费
./kafka_consumer.sh TOPIC_TEST timestamp=1763615660670
3. 搜索包含特定字符串的消息
bash
# 消费并过滤包含指定字符串的消息
./kafka_consumer.sh TOPIC_TEST search_str='已上报'
4. 组合使用 - 从时间戳开始并搜索
bash
# 从指定时间戳开始,并搜索特定字符串
./kafka_consumer.sh TOPIC_TEST timestamp=1763615660670 search_str='已上报'
参数详解
必需参数
topic_name:要消费的Kafka Topic名称
可选参数
timestamp:时间戳(毫秒),从该时间点开始消费search_str:要模糊搜索的字符串,支持grep语法
输出格式
脚本会显示每条消息的详细信息:
text
分区 0 - 开始消费 (偏移量: 12345)
================================================
Timestamp: 1691234567890, Partition: 0, Offset: 12345, Message: {JSON数据}
使用示例
示例1:调试特定时间段的消息
bash
# 查看从今天上午10点开始的所有消息
./kafka_consumer.sh TOPIC_TEST timestamp=1691235600000
示例2:查找特定设备的消息
bash
# 查找包含特定设备ID的所有历史消息
./kafka_consumer.sh TOPIC_TEST search_str='869406068012219'
示例3:故障排查
bash
# 从故障发生时间点开始,查找相关错误信息
./kafka_consumer.sh TOPIC_TEST timestamp=1763615660670 search_str='ERROR'
注意事项
1. 权限要求
- 需要有执行脚本的权限
- 需要能够访问Kafka集群
- 需要有读取Topic的权限
2. 时间戳说明
- 时间戳必须是毫秒格式
- 可以使用在线工具或以下命令获取时间戳:
bash
# 当前时间戳(毫秒)
date +%s%3N
# 指定时间的时间戳
date -d "2023-01-01 10:00:00" +%s%3N
3. 搜索功能
- 使用grep进行模糊匹配
- 支持正则表达式
- 搜索字符串需要用单引号包裹,避免特殊字符被解析
4. 停止消费
- 按
Ctrl+C停止所有消费进程 - 脚本会自动清理后台进程
浙公网安备 33010602011771号