Kafka学习笔记(二):Kafka之常用配置文件核心内容


上一篇了解了Kafka的基本概念,主要是日志、主题、分区、生产者、消费者、消费者群组、偏移量、消息和批次以及Broker和集群。这些基本概念了解以后就是上手自己下载Kafka,安装起来。安装Kafka很简单,就是将下载的压缩包解压出来,首先启动zookeeper,然后再启动Kafka服务。启动zookeeper、Kafka的时候都需要指定配置文件,zookeeper不是本系列文章的主要内容,就不多说,使用默认的zookeeper配置就可以。同样Kafka启动使用默认配置也可以,但是为了学习Kafka,还是需要了解配置文件中各项内容的含义以及在服务中起到的作用。

1. 服务启动

服务启动很简单,下载解压不多说。下面直接看命令。

1.1 zookeeper启动

  • windows系统

    zookeeper-server-start.bat ../../config/zookeeper.properties
  • Linux系统

    zookeeper-server-start.sh ../config/zookeeper.properties

1.2 Kafka启动

  • windows系统

    kafka-server-start.bat ../../config/server.properties
  • Linux系统

    kafka-server-start.sh ../config/server.properties

2. 配置文件server.properties

从上面的命令就可以看出来Kafka配置文件所在的位置。接下来依次来说一下Kafka配置文件细节。

2.1 borker.id

原配置文件中的说明:

# The id of the broker. This must be set to a unique integer for each broker.
broker.id=0

这个是Broker的Id,必须在每个Broker内保证唯一。其实在单机的情况下broker.id是不用设置的,采用默认即可。如果在集群中,每台机器都需要设置,且要保证唯一。这里说取值是integer,但是需要注意的是大于等于0的整数。

2.2 listeners

原配置文件中的说明:

# The address the socket server listens on. It will get the value returned from 
# java.net.InetAddress.getCanonicalHostName() if not configured.
#   FORMAT:
#     listeners = security_protocol://host_name:port
#   EXAMPLE:
#     listeners = PLAINTEXT://your.host.name:9092
listeners=PLAINTEXT://:9092

FORMAT说明了格式,EXAMPLE给出了示例。在配置文件中listeners=PLAINTEXT://:9092默认是被注释的。因为在不配置的时候,这个就是对应的默认值。即使多台机器部署成集群,也不需要做修改。但是如果某台服务器上部署了两个Kafka服务的话,就需要对这个配置进行修改,只要修改端口号,保证唯一即可。

2.3 log.dirs

原配置文件中的说明:

# A comma seperated list of directories under which to store log files
log.dirs=/tmp/kafka-logs

指定存储log文件的位置,这个log并不是我们平时理解的日志文件,而是请求数据,log地址可以同时配置多个,用逗号隔开。这个参数非常重要。上一篇博客里面写到的分区,就是放在这个日志目录下的。每一个分区都会创建一个目录放在日志目录下。

2.4 num.partitions

原配置文件中的说明:

# The default number of log partitions per topic. More partitions allow greater
# parallelism for consumption, but this will also result in more files across
# the brokers.
num.partitions=1

这个用来指定分区的数量的,用在默认创建主题的时候,因为在手动使用命令创建主题的时候是需要指定分区个数的。如果Kafka服务是单机的,毋庸置疑,分区都建在这个服务中的log.dirs目录下。如果Kafka是集群,每个主题的多个分区会均匀的分配到集群中的每个机器上。

2.5 num.recovery.threads.per.data.dir

原配置文件中的说明:

# The number of threads per data directory to be used for log recovery at startup and flushing at shutdown.
# This value is recommended to be increased for installations with data dirs located in RAID array.
num.recovery.threads.per.data.dir=1

Kafka是基于磁盘的服务,但是并不是所有的数据都是放在磁盘中的,生产者数据提交到Kafka,数据会在内存中有一份,在消费者消费的时候优先从内存中读取,这样就需要在Kafka关闭的时候把内存中数据刷入到磁盘中、开启的时候把磁盘中的数据读取到内存中,此参数就是用来指定刷入和读取单个log目录的线程数,如果log.dirs配置了4个目录,此参数配置了3,那么对应的线程数总量就是3*4=12个。

2.6 log.retention.hours

原配置文件中的说明:

# The minimum age of a log file to be eligible for deletion
log.retention.hours=168

表示Kafka数据在磁盘中保存的时间,超过这个时间就会被清理,默认是7天,需要注意的是这个时间是作用在已经闭合和文件上(什么时候闭合,参考下面的log.segment.bytes参数说明)。此参数还可以使用分钟和毫秒为单位,对应的参数名分别是:log.retention.minuteslog.rentention.ms

2.7 log.retention.bytes

原配置文件中的说明:

# A size-based retention policy for logs. Segments are pruned from the log as long as the remaining
# segments don't drop below log.retention.bytes.
log.retention.bytes=1073741824

表示Kafka删除log数据的文件上限大小,当log文件达到指定的大小,就会被删除。如果这个参数和log.retention.hours同时配置,以谁先达到条件先执行谁的策略。

2.8 log.segment.bytes

原配置文件中的说明:

# The maximum size of a log segment file. When this size is reached a new log segment will be created.
log.segment.bytes=1073741824

分区中单个log文件最大容量,当单个分区内存储log数据的单个文件达到该大小的时候就会闭合,然后重新生成一个log文件用来存储后续的数据。结合上面的log.retention.hours参数,闭合后这个文件开始被打上计时的标签,当达到指定的保存时间就会被删除。

这里引发一个思考,如果log.retention.bytes配置的值比log.segment.bytes小,这就会导致log文件永远不会出现闭合,因为在闭合之前就会被删掉。又或者说非闭合的log文件即使达到log.retention.bytes也不会被删除,必须等到其闭合才会执行log.retention.bytes指定的删除策略。不管是上面的那一种情况,log.retention.hours即使配置了也是没有作用的。

这个后续在学习中测试一下,先打个标记在此!

2.9 zookeeper.connect

原配置文件中的说明:

# Zookeeper connection string (see zookeeper docs for details).
# This is a comma separated host:port pairs, each corresponding to a zk
# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".
# You can also append an optional chroot string to the urls to specify the
# root directory for all kafka znodes.
zookeeper.connect=localhost:2181

这个没有什么多说的,Kafka是依赖zookeeper的,所有需要在配置文件中指定zookeeper的连接地址,如果zookeeper是集群,需要将多台机器都写上,用逗号隔开即可。

2.10 auto.create.topics.enable

这个参数在配置文件中没有体现,但是其是实际存在。用来指定是否允许自动创建主题,缺省值就是true,如向Kafka中推数据的时候对应topic没有提前创建,Kafka会自动创建。

2.11 message.max.bytes

这个参数在配置文件中也是不存在的。其表示Kafka能够接收处理的单个消息最大字节数,注意这个值producerconsumer必须保持一致,且不要大于fetch.message.max.bytes属性的值,该值默认是1000000字节,大概900KB~1MB。


文章作者: 程序猿洞晓
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 程序猿洞晓 !
评论
 上一篇
Kafka学习笔记(三):Kafka的第一个HelloWorld Kafka学习笔记(三):Kafka的第一个HelloWorld
引入依赖需要小心,如果没有做相关的了解很容易引入jar包不可用,导致一直有错误。在下载Kafka的时候,Kafka的压缩包的名称都类似这样`kafka_2.11-0.10.1.1`。其中`2.11`是代表Kafka的版本,`0.10.1.1`代表的是客户端的版本。所以在项目中引入Kafka的客户端jar的时候一定要和这个版本对应上,并不是越高越好。
2019-06-06
下一篇 
Kafka学习笔记(一):Kafka基本概念理解 Kafka学习笔记(一):Kafka基本概念理解
ActiveMQ、RabbitMQ是用的比较多得消息队列,但是随着时间的推移,大数据的应运而生,这两种消息队列使用的也是越来越少了,Kafka渐渐进入开发人员的视线,再加上Kafka天生的集群运行、大数据量的处理能力,以及数据的持久化能力等,主导地位也是必然的事情。
2019-05-20
  目录