log.retention.ms
消息时间
Kafka通常根据时间决定数据可以保留多久。默认使用log.retention.hours
参数配置时间,默认值是168小时,也就是一周。除此之外,还有其他两个参数,log.retention.minutes
和log.retention.ms
,这三个参数作用是一样的,都是决定消息多久以会被删除,不过还是推荐使用log.retention.ms
,如果指定了不止一个参数,Kafka会优先使用最小值的那个参数。log.retention.bytes
消息大小
通过保留的消息字节数来判断小是否过期,它的值通过参数log.retention.bytes
来指定,作用在每一个分区上,也就是说如果一个包含8个分区的主题,并且log.retention.bytes
被设置为1GB,那么这个主题最多可以保留8GB的数据,所以,当主题的分区个数增加时,整个主题可以保留的数据也随之增加。
如果同时指定了两个参数没只要任意一个参数得到满足,消息就会被删除。例如,假设
log.retention.ms
为86400000(也就是一天),log.retention.bytes
的值设置为1GB,如果消息字节总数在不到一天的时间就超过了1GB,那么堆出来的部分就会被删除,相反,如果消息字节总数小与1GB,那么一天之后这些消息也会被删除,尽管分区的数据总量小于1GB
log.segment.bytes
日志片段大小
当消息来到broker是,它们就会被追加到分区的当前日志片段上,当日志片段大小到达log.segment.bytes指定的上限(默认是1GB)时,当前日志片段就会被关闭,一个新的日志片段就会被打开。如果一个日志之片段被关闭,就开始等待过期时间。这个参数的值越小们就会越频繁的关闭和分配新文件,从而降低了磁盘写入的整体效率。log.segment.ms
日志片段时间
指定了多长时间之后日志片段会被关闭,就像log.retention.bytes
和log.retention.ms
这两个参数一样。log.segment.bytes
和log.segment.ms
这两个参数之间也不存在互斥问题。日志片段会在大小或时间达到上限时被关闭,就看哪个条件晓得到满足。默认情况下log.segment.ms
没有设定值,所以只根据大小来关闭日志片段message.max.bytes
单条消息大小- broker通过设置
message.max.bytes
参数来限制单个消息的大小,默认值时1000000,也就是1MB。如果生产者尝试发送的消息超过1MB,不仅消息不会被接受,还会受到broker返回的错误信息。跟其他与字节相关的配置参数一样,该参数指的是压缩后的消息大小,也就是说,只要压缩后的消息小于message.max.bytes
指定的值,消息的实际大小可以远大于这个值。