1. num.partitions
含义:指明了新创建的主题将会有多少个分区数量。
**如何选择分区数量?
1):考虑主题吞吐量,100k or 1G?
2):单个分区读取数据的最大吞吐量是多少,例如,每个分区一般都会有一个消费者,
该消费者写入数据库的速度是每秒50M,那么以为这从一个分区读取数据的速度不
需要超过50M/s
3):与2类似的方法估算生产者的吞吐量,不过生产者的吞吐量一般大于消费者
4):broker包含的分区数量,可用磁盘空间以及网络带宽等因素。
5):如果消息是按照不同的键来写入分区的,那么为已有的主题增加分区是困难的,例如,
消息的分区是对键进行hash取模运算,那么增加分区将会影响对这之前的数据的hash定位
6):单个broker对分区是有限制的,分区越多,占用内存越多,完成领袖选举的过程也就越慢。
example:
如果每秒钟从主题上写入和读取1GB的数据,并且每个消费者每秒可以处理50MB的数据,
那么至少需要20个分区,这样就可以同时让20个消费者读取这些分区数据,从而达到每秒钟1GB
的吞吐量。
2. log.retention.ms
含义:数据保留多长时间。默认使用log.retention.hours参数配置时间,默认是168小时,就是一周的时间。
另外还有两个参数log.retention.minutes和log.retention.ms作用是一样的。推荐使用log.retention.ms
3. log.retention.bytes
含义:通过保留字节数量判断消息是否过期。作用在每一个分区上,假设一个包含8分区的主题,
并且log.retention.bytes设置为1GB,那么该主题将会保留8GB的数据,1GB * 8;
**log.retention.ms & log.retention.bytes
二者只要一个条件满足以后,消息数据将会被删除。也就是在log.retention.ms时间内,log.retention.bytes设置的值
达到了,那么消息会被删除;消息大小没有达到log.retention.bytes设置的值,但是时间已经到了log.retention.ms
设置的值,那么消息仍然会被删除。
4. log.segment.bytes
含义:日志片段达到该属性设置的值,那么当前的日志片段将会被关闭,一个新的日志片段将会被打开。
注意:一个日志片段被关闭以后,将会等待过期,这个参数设置越小,那么将会越频繁的关闭和分配
新文件,从而降低了磁盘写入的整体效率。
** 如果消息量不大, 调整该参数变得很重要,一个主题每天只接受100MB消息,但是log.retention.bytes使用
默认配置,那么也就是需要大约10天(1GB/100M)才会将该“日志片段” 填满,而“日志片段被关闭之前是不会过期的”,
所以,如果log.retention.ms被设置为604 800 000(一周时间),那么日志片段真正过期时间是17天(10 + 7),
也就是,填满日志片段时间 + 日志片段失效时间
5. log.segment.ms
含义:该参数也是控制”日志片段“的参数,指定了多长时间日志片段将会被关闭。
log.retention.ms & log.retention.bytes 这两个参数只要满足任意一个条件,
那么日志片段将会被关闭。不过,默认情况下,log.segment.ms没有被设定值,
所以只根据log.segment.bytes设置的日志片段大小来关闭日志片段。
6. message.max.bytes
含义:限制单个消息的大小,默认值是:1 000 000,也就是大约1MB。当消息超过这个设定值,那么
消息将不会被接受,还将收到broker返回的错误信息。该参数指的是压缩后的消息大小。