kafka---消息日志详解

avatar
作者
猴君
阅读量:0

一、Log Flush Policy(log flush 策略)

1、设置内存中保留日志的个数,当达到这个数量的时候,内存中的数据会被强制刷到disk中
log.flush.interval.messages=10000

2、设置内存中保留日志的时间,当达到这个时间的时候,日志会被刷新到disk中
log.flush.interval.ms=1000

二、Log Retention Policy (日志保留策略)

1、 日志保留时间,超过该时间,日志会被删除
log.retention.hours=48

2、设置一个分区的大小(该分区包含所有的segment文件),segment文件会被删除(pruned)直到剩余的segment文件小于(drop below)该设置大小
A size-based retention policy for logs. Segments are pruned from the log unless the remaining segments drop below log.retention.bytes. Functions independently of log.retention.hours.

log.retention.bytes=1073741824

3、设置一个segment的大小,当达到这个大小的时候,会创建一个新的segment新文件重新写日志
log.segment.bytes=1073741824

4、设置一个时间间隔,用于检查是否需要删除segment文件(检查是否需要删除的频率)
log.retention.check.interval.ms=300000

5、日志文件被真正删除前的保留时间
log.segment.delete.delay.ms=60000

注意:当删除的条件满足的视乎,日志将会被"删除",但是这里的删除其实只是将该日志进行了”delete“标注,文件只是无法被索引到了而已,但是文件本身仍然是存在的,只有当过了log.segment.delete.delay.ms这个时间后,文件才会被删除

三、问题

Q1 kafka消费的是内存中的数据还是磁盘中的数据?消息流转流程?

既会消费内存中的数据也会消费磁盘上的数据

producer----broker内存------flush到磁盘----加载到broker内存----consumer消费
|-------consumer消费

Q2 log.flush.interval.messages 与 log.flush.interval.ms 这两个参数以哪个为准?

上述两个参数,设置了哪个参数,则哪个参数生效,如果没设置则按照默认值来;如果都设置了,则任意一个达到要求都会执行flush
log.flush.interval.messages 默认值 9223372036854775807
log.flush.interval.ms 默认值为ull,如果未设置,则使用log.flush.scheduler.interval.ms 默认值 9223372036854775807

Q3 log.retention.hours 与 log.retention.bytes 这两个参数以哪个为准?

上述两个参数,设置了哪个参数,则哪个参数生效,如果没设置则按照默认值来;如果都设置了,则任意一个达到要求都会执行删除;
log.retention.hours 默认是168h,达到这个时间,会执行清理策略
log.retention.bytes 默认是-1 则大小无上限

Q4 未被消费的数据,但是达到了时间上限或者大小上限 ,日志会被删除吗?

会被删除

Q5 如何查看消息消费进度

kafka-consumer-groups  --bootstrap-server "ip1:port1,ip2:port2,ip3,port3"  --group "group1" --group "group2"   --describe  

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!