概述
Broker配置
介绍完kafka的基本概念之后一篇文章让你快速上手Kafka,接下来说说Kafka的配置,Kafka涉及很多配置选项,涉及安装和调优的方方面面。不过大多数调优选项可以使用默认配置,除非对调优有特别的要求
注意:有一些配置项,在单机的时候可以直接使用默认值,但在部署到其他环境的时候,大部分的配置都是需要经过修改后才能用在集群里
一、常规基础配置
1、broker.id
一个单机的kafka服务器称为broker,每个broker都需要一个标识符,使用broker.id表示。它的默认值为0,也可以设置为其他任意的整数。但是这个值在整个kafka集群里必须是唯一的。建议是将他们设置为与机器名相关的整数,可以更好的进行机器名和id映射,例如机器名为项目名-1,那么broker.id设置为1
2、port
默认监听的是9092端口,修改该参数可以把它设置成其他任意可用的端口。如果使用1024以下的端口,需要使用root权限启动kafka(不建议)
3、zookeeper.connect
默认的是localhost:2181,用于指定保存broker元数据的Zookeeper地址。该配置参数是用逗号分隔的一组hostname:port/path列表,含义如下:
hostname:是Zookeeper服务器的机器名或IP地址
port:是Zookeeper的客户端连接端口
path:是可选的Zookeeper路径,作为Kafka集群的chroot环境,如果不指定,默认使用根路径
最好是在配置文件里指定一组Zookeeper服务器,用分号将他们分隔开。一旦有一个Zookeeper服务器宕机,broker可以连接到Zookeeper群组的另一个节点上
4、log.dirs
我们都知道,Kafka把消息全部保存在磁盘上,而存放这些日志片段的目录就是通过log.dirs指定的。它是一组使用逗号隔开的本地文件系统路径。如果指定了多个路径,那么broker就会根据“最少使用"原则,把同一个分区的日志片段保存在同一个路径下。
注意:broker会往拥有最少数目分区的路径新增分区,而不是往拥有最少磁盘空间的路径下新增分区
5、num.recovery.threads.per.data.dir
配置每个日志目录下的处理线程数,默认配置为1。因为这些线程只是在服务器启动和关闭时才会用到,所以完全可以设置大量的线程来达到并行操作的目的。特别是对于包含大量分区的服务器来说,一旦发生崩溃,在进行恢复时使用并行操作可能会省下数小时的时间。
注意:设置此参数对应的是log.dirs指定的单个日志目录。也就是说,如果设置为8,log.dirs指定了3个路径,那么总共需要24个线程。
6、auto.create.topic.enable
默认情况下,Kafka 会在如下 3 种情况下创建主题
当一个生产者开始往主题写入消息时
当一个消费者开始从主题读取消息时
当任意一个客户端向主题发送元数据请求时
建议:最好是设置成false。
二、主题的默认配置
Kafka为新创建的主题提供了很多默认配置参数。可以通过管理工具为每个主题单独配置一部分参数,比如分区个数和数据保留策略。
7、num.partitions
指定新创建的主题包含多少分区。默认为1,注意,我们可以增加分区的个数,但是不能减少分区的个数,所以如果想让一个主题分区个数少于num.partitions指定的值,需要手动创建。Kafka集群通过分区对主题进行横向扩展,所以当有新的broker加入集群时,可以通过分区个数来实现集群的负载均衡。当然这不是说,在存在多个主题的情况下(分布在多个broker中),为了能让分区分布到所有的broker上,主题分区的个数必须要大于broker的个数。不过,拥有大量消息的主题如果进行负载均衡,就需要大量的分区。
问:如何选定分区数量呢?
答:选择数量时候,需要考虑以下因素:
主题需要达到多大的吞吐量?例如,希望每秒钟写入100KB还是1GB
从单个分区读取数据的最大吞吐量是多少?每个分区一般都会有一个消费者,如果消费者将数据写入数据库中的速度不会超过每秒50MB,那么从一个分区读取的数据的吞吐量也不应该超过每秒50MB。
通过类似的方法估算一个生产者向单个分区写入的数据的吞吐量,不过生产者的速度一般比消费者快很多,所以最好为生产者多估算一些吞吐量。
每个broker包含的分区个数、可用的磁盘空间和网络宽带。
总结:分区个数=主题吞吐量/消费者吞吐量
8、log.retention.hours
指定数据可以被保留多久,默认168个小时,也就是一周。如果指定了不止一个参数,那么kafka会优先使用具有最小值的那个参数。
9、log.retention.bytes
指定消息字节数判断消息是否过期。该参数作用在每一个分区上,也就是说,如果一个包含8个分区的主题,并且log.retention.bytes被设为1GB,那么这个主题最多可以保留8GB的数据,所以当分区个数增加时,整个主题可以保留的数据也随之增加。
注意:如果同时指定log.retention.hours和log.retention.bytes,只要一个条件满足,消息就会被删除。
10、log.segment.bytes
当日志片段大小达到指定的数量的时候(默认为1G),当前日志片段就会被关闭,一个新的日志片段被打开。如果一个日志片段被关闭,就开始等待过期。这个参数的值越小,就会频繁的关闭和分配新文件,从而降低磁盘写入的整体效率。
11、log.segment.ms
上面提到日志片段经关闭后需等待过期,那么这个参数就是指定日志多长时间被关闭的参数和,log.segment.ms 和 log.retention.bytes 也不存在互斥问题。日志片段会在大小或时间到达上限时被关闭,就看哪个条件先得到满足。
12、message.max.bytes
指定单个消息的大小。默认值为1000 000,也就是1MB。如果生产者尝试发送的消息超过这个大小,不仅消息不会被接收,还会收到 broker 返回的错误消息。跟其他与字节相关的配置参数一样,该参数指的是压缩后的消息大小,也就是说,只要压缩后的消息小于 mesage.max.bytes,那么消息的实际大小可以大于这个值
最后
以上就是无私纸鹤为你收集整理的kafka服务器默认接收最大消息,一文教你如何配置Kafka!的全部内容,希望文章能够帮你解决kafka服务器默认接收最大消息,一文教你如何配置Kafka!所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复