kafka-常用命令及配置
1、broker端的配置参数
- 官方说明:https://kafka.apache.org/documentation/#configuration
1、基本配置
#此服务器的代理id。 如果未设置,将生成一个唯一的代理id。为了避免zookeeper生成的broker id和用户配置的broker id之间的冲突,生成的broker id从reserved.broker.max.id + 1开始。 broker.id=1 #日志数据保存的目录。如果没有设置,则使用log.dir中的值 log.dirs=/tmp/kafka/log/ #以hostname:port的形式指定ZooKeeper连接字符串,其中host和port为ZooKeeper服务器的主机和端口。为了允许在该ZooKeeper机器故障时通过其他ZooKeeper节点进行连接,还可以指定多个主机,形式为hostname1:port1,hostname2:port2,hostname3:port3。 #服务器也可以有一个ZooKeeper chroot路径作为它的ZooKeeper连接字符串的一部分,它将其数据放在全局ZooKeeper命名空间中的某个路径下。例如,要给出/chroot/path的chroot路径,可以将连接字符串赋值为hostname1:port1,hostname2:port2,hostname3:port3/chroot/path。 zookeeper.connect=192.168.248.128:2181,192.168.248.130:2181,192.168.248.131:2181
2、日志相关配置
#保存日志数据的目录(对log.dirs属性的补充) log.dir=/tmp/kafka/log/ #保存日志数据的目录。如果没有设置,则使用log.dir中的值 log.dirs=/tmp/kafka/log/ #Kafka日志中对消息的压缩使用哪种压缩方式。可选值有'gzip'、'snappy'、'lz4'、'zstd'、'producer'和'uncompressed',默认值为"producer"。 #'uncompressed'不压缩 #'producer'保留生产者使用的压缩方式 compression.type=producer #定义消息中的时间戳是消息创建时间还是日志追加时间。可选值有'CreateTime'和'LogAppendTime',默认值为'CreateTime' log.message.timestamp.type=CreateTime #每当写入多少(字节)消息时,偏移量索引文件和时间戳索引文件分别增加一个偏移量索引项和时间戳索引项。默认值是4096字节,即4KB log.index.interval.bytes=4096
1、日志切分
#单个日志文件(LogSegment文件)的最大大小。默认值为1073741824,即1GB。(根据日志文件大小,切分日志文件) log.segment.bytes=1073741824 #log.roll.ms的优先级高于log.roll.hours。默认情况下,只配置了log.roll.hours参数,其值为168即7天。(根据日志文件时间,切分日志文件) #一个LogSegment文件是activeSegmen的最大时间(以小时为单位),默认值为168小时,即7天。 log.roll.hours=168 #索引文件的最大大小,默认值为10485760,即10MB。(根据索引文件大小,切分日志文件) log.index.size.max.bytes=10485760
2、日志清理
- 日志清理有三种配置方式
#日志删除 log.cleanup.policy=delete #日志压缩,并且还需要将log.cleaner.enable设定为true log.cleanup.policy=compact #启用日志清理进程在服务器上运行,默认值true,即启用。如果禁用,这些主题将不会被压缩并持续增长。 log.cleaner.enable=true #同时支持日志删除和日志压缩两种策略 log.cleanup.policy=delete,compact
1、时间删除日志
#清理日志的策略设置为日志删除(没有log.cleanup.policy指令时的默认配置) log.cleanup.policy=delete #日志清理器检查日志是否删除的频率,默认值为300000,即5分钟。 log.retention.check.interval.ms=300000 #从文件系统中删除文件之前等待的时间,默认值为60000,即1分钟。(执行"delete-file"任务的延迟时间,此时已在要删除的日志名后添加了".deleted"后缀) file.delete.delay.ms=60000 ###基于时间删除日志 #log.retention.ms的优先级最高,log.retention.minutes次之,log.retention.hours最低。 #在删除日志文件之前保持日志文件的小时数(以小时为单位),默认值为168小时,即7天。(log.retention.hours是没有配置如何清理日志时的默认配置) log.retention.hours=168 ###基于大小删除日志 #日志文件的总大小,默认值为-1,表示无穷大。(分区级别,注意与log.segment.bytes的区别) log.retention.bytes=-1 ###基于日志起始偏移量 #某日志分段的下一个日志分段的起始偏移量baseOffset是否小于等于logStartOffset,若是,则可以删除此日志分段 #logStartOffiset的值可以修改
2、日志压缩
#日志压缩,并且还需要将log.cleaner.enable(默认值为true)设定为true log.cleanup.policy=compact log.cleaner.enable=true ###日志清理线程 #所有日志清理线程可以使用的内存空间的总大小,默认值134217728,即128MB log.cleaner.dedupe.buffer.size=128MB #日志清理线程的个数,默认值为1 log.cleaner.threads=1 #日志清理器重复数据删除缓冲区负载因子,默认值为0.9(该值越大,越可能导致哈希碰撞)。(每个日志清理线程可以使用的内存比例,默认情况下,每个日志清理线程可以使用的内存大小是"(128MB/1)*0.9") log.cleaner.io.buffer.load.factor=0.9 ###选择哪些日志文件进行日志压缩操作 #消息在日志中保持未压缩状态的最小时间,仅适用于正在压缩的日志,默认值为0(即firstUncleanableOffset的值在保留时间之前。默认情况下firstUncleanableOffset等于activeSegment的baseOffset) log.cleaner.min.compaction.lag.ms=0 ###进行日志压缩操作的条件 #使一个日志符合清洗条件的脏日志与总日志的最小比率,即最小污浊率,默认值为0.5。(没有达到最小污浊率之前,不进行日志清理) log.cleaner.min.cleanable.ratio=0.5 #如果还指定了log.cleaner.max.compaction.lag.ms或log.cleaner.min.compaction.lag.ms配置,日志压缩器会在以下任一情况下立即认为该日志适合进行压缩: #(1)已经满足最小污浊率,并且日志至少在log.cleaner.min.compaction.lag.ms期间有脏(未压缩)记录 #(2)如果日志在最多log.cleaner.max.compaction.lag.ms期间有脏(未压缩)记录。(即使不满足最小污浊率,也进行日志清理) ###将要进行日志压缩的文件进行分组 #每组中日志分段的占用空间大小之和不超过该指令的值,默认值为1GB(即参数就是:单个日志文件(LogSegment文件)的最大大小) log.segment.bytes=1073741824 #索引文件占用大小之和不超过该指令的值,默认值为10MB(即参数就是:索引文件的最大大小) log.index.size.max.bytes=10485760 #删除记录保留多长时间?默认值为86400000,即24小时(。包含墓碑消息的保留时间) log.cleaner.delete.retention.ms=86400000
3、消息刷新到磁盘
#在消息被刷新到磁盘之前,日志分区上累积的消息数,默认值是9223372036854775807 log.flush.interval.messages=10000 #每当producer写入10000条消息时,刷数据到磁盘 #任何主题中的消息在刷新到磁盘之前保存在内存中的最大时间(以毫秒为单位)。如果未设置,则使用log.flush.scheduler.interval.ms中的值 log.flush.interval.ms=1000 #每间隔1秒钟时间,刷数据到磁盘 #日志刷新器检查是否需要将任何消息刷新到磁盘的频率(以毫秒为单位),默认值是9223372036854775807 log.flush.scheduler.interval.ms=
- 尽量内存交换,即使用swap。建议将操作系统的参数vm.swappiness设置为1。
#查看vm.swappiness的值 ~]# cat /proc/sys/vm/swappiness #临时调整 ~]# sysctl vm.swappiness=1 #永久调整 ~]# vim /etc/sysctl.conf vm.swappiness=1 #使/etc/sysctl.conf中的配置生效 ~]# sysctl -p
3、自动创建主题
- 当生产者向一个尚未创建的主题发送消息或消费者从一个未知主题中读取消息时,就会自动创建这个没有的主题。
#在服务器上启用自动创建主题。(生产环境建议设置为false,不可以创建) auto.create.topics.enable=true #当auto.create.topics.enable=true时,默认分区数 num.partitions=1 #当auto.create.topics.enable=true时,默认副本因子 default.replication.factor=1
4、分区自动平衡功能
#是否开启分区自动平衡功能(生产环境建议设置为false,不开启) auto.leader.rebalance.enable=true #分区不平衡率。当auto.leader.rebalance.enable=true,且达到分区不平衡率时,就执行分区自动平衡 leader.imbalance.per.broker.percentage=10 #当auto.leader.rebalance.enable=true,检查分区不平衡率的周期 leader.imbalance.check.interval.seconds=300
5、优雅关闭kafka
- 使用kill -s TERM PID 或kill -15 PID的方式来关闭进程,注意千万不要使用kill -9的方式。
#是否开启优雅关闭kafka服务。默认值是true,即默认开启优雅关闭 controlled.shutdown.enable=true #设置ControlledShutdown动作如果执行不成功就进行重试的次数。默认为3次。 controlled.shutdown.max.retries=3 #每次重试的间隔。默认为5000ms。 controlled.shutdown.retry.backoff.ms=5000
6、其他
#机架信息 broker.rack=RACK1 #是否开启自动生成brokerId broker.id.generation.enable=true#默认情况下为true,即开启此功能 #自动生成brokerId的基准值 reserved.broker.max.id=1000#默认值为1000 #是否可以删除主题。如果时false删除主题的操作将会被忽略(生产环境建议设置为true,可以删除) delete.topic.enable=true #是否可以从非ISR列表中的选举leader。默认值是false,如果为true表示允许从非ISR列表中的选举leader,从AR列表中找到第一个存活的副本即为leader。 unclean.leader.election.enable=false
1
# #