一、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