miller
发布于

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 后,它会修剪为实际的大小

https://blog.csdn.net/ko0491/article/details/109687284#:~:text=log.segment.bytes%20%E5%8F%82%E6%95%B0%E7%9A%84,%E5%80%BC%E4%B8%BA1073741824%EF%BC%8C%E5%8D%B31GB%E3%80%82

浏览 (215)
点赞
收藏
评论