kafka 操作
也可参考下边 3 个开源,
kafka-ui https://github.com/provectus/kafka-ui
https://github.com/dushixiang/kafka-map
https://github.com/xxd763795151/kafka-console-ui
问 AI:
查看所有 topic
./kafka-topics.sh --bootstrap-server kafka-cs:9092 --list
查看tccloud-otep 此消费组的消费情况
./kafka-consumer-groups.sh --bootstrap-server kafka-cs:9092 --group tccloud-otep --describe
手动重置 Offset:
./kafka-consumer-groups.sh --bootstrap-server kafka-cs:9092 --group tccloud-otep --reset-offsets --to-latest --execute
./kafka-consumer-groups.sh --bootstrap-server kafka-cs:9092 --group tccloud-otep --reset-offsets --to-earliest-xxx --all-topics --execute
手动设置 Offset 注意数字:
kafka-consumer-groups.sh --bootstrap-server kafka-cs:9092 --group tccloud-otep --reset-offsets --to-offset xxxooo --execute
kafka-consumer-groups.sh --bootstrap-server <broker-address> --group <group-id> --reset-offsets --to-offset <offset> --topic <topic-name> --execute
查看 Kafka 主题的保留策略:
./kafka-topics.sh --bootstrap-server kafka-cs:9092 --describe --topic OTEP_EVENT
调整 Kafka 的日志保留时间((7 天,单位毫秒)): XXX 未试过
kafka-configs.sh --bootstrap-server kafka-cs:9092 --entity-type topics --entity-name OTEP_EVENT --alter --add-config retention.ms=604800000
kafka 参数:
https://www.cnblogs.com/dayu123/p/16486319.html
切分文件
当满足如下几个条件中的其中之一,就会触发文件的切分:
1. 当前日志分段文件的大小超过了 broker 端参数 log.segment.bytes 配置的值。log.segment.bytes 参数的默认值为 1073741824,即 1GB。
当前日志分段中消息的最大时间戳与当前系统的时间戳的差值大于 log.roll.ms 或log.roll.hours 参数配置的值。如果同时配置了 log.roll.ms 和 log.roll.hours 参
数,那么 log.roll.ms 的优先级高。默认情况下,只配置了 log.roll.hours 参数,其值为168,即 7 天。
2. 偏移量索引文件或时间戳索引文件的大小达到 broker 端参数 log.index.size.max.bytes
配置的值。 log.index.size.max.bytes 的默认值为 10485760,即 10MB。
3. 追加的消息的偏移量与当前日志分段的偏移量之间的差值大于 Integer.MAX_VALUE ,即要追加的消息的偏移量不能转变为相对偏移量
为什么是 Integer.MAX_VALUE ?
1024 * 1024 * 1024=1073741824
在偏移量索引文件中,每个索引项共占用 8 个字节,并分为两部分。
相对偏移量和物理地址。
相对偏移量:表示消息相对与基准偏移量的偏移量,占 4 个字节
物理地址:消息在日志分段文件中对应的物理位置,也占 4 个字节
4 个字节刚好对应 Integer.MAX_VALUE ,如果大于 Integer.MAX_VALUE ,则不能用 4 个字节进行表示了
- 索引文件切分过程
索引文件会根据 log.index.size.max.bytes 值进行预先分配空间,即文件创建的时候就是最大
值
当真正的进行索引文件切分的时候,才会将其裁剪到实际数据大小的文件。
这一点是跟日志文件有所区别的地方。其意义降低了代码逻辑的复杂性
查看一个topic分区目录下的内容,发现有log、index和timeindex三个文件:
- log文件名是以文件中第一条message的offset来命名的,实际offset长度是64位,但是这里只使用了20位,应付生产是足够的。
- 一组index+log+timeindex文件的名字是一样的,并且log文件默认写满1G后,会进行log
rolling形成一个新的组合来记录消息,这个是通过broker端log.segment.bytes =1073741824指定的。 - index和timeindex在刚使用时会分配10M的大小,当进行 log rolling 后,它会修剪为实际的大小