kafka部分属性配置字段详解

broker配置

常规配置

  1. broker.id默认值是0,可以被设置成任意整数,但是在kafka集群中必须是唯一的。建议设置成与机器名具有相关性的整数
  2. prot kafka默认监听9092端口
  3. zookeeper.connect 目的是保存broker的元数据 该配置参数是用冒号分隔的一组hostname:port/path列表。每一部分的含义如下:
  • hostname是Zookeeper服务器的机器名或者IP地址
  • port是zookeeper的客户端连接端口
  • /path是可选饿zookeeper路径
  1. log.dir kafka把所有消息都保存在磁盘上,存放这些日志片段的目录是通过log.dir指定的。如果指定了多个路径,则borker会根据‘最少使用原则’把同一个分区的日志片段保存在同一个路径下。要注意,broker会往拥有最少数目分区的路径增加分区,而不是往拥有最小磁盘空间的路劲新增分区。
  2. num.recovery.threads.per.data.dir 所配置的数字对应的是log.dirs指定的单个日志目录。也就是说,如果num.recovery.threads.per.data.dir被设置为8,并且log.dir指定了3个路径,那么总共需要24个线程。
  3. auto.create.topics.enable 默认设置为false。

主题的默认配置

  1. num.partitions参数指定了新创建的主题将包含多少个分区,默认值为1,可以增加主题分区的个数,但是不能减少分区的个数
  2. log.retention.ms kafka通常根据时间来决定数据可以被保留多久。默认使用log.retention.hour参数来配置时间,默认值是168小时,也就是一周。
  3. log.retention.bytes 通过保留的消息的字节数来判断消息是否过期。它的值通过参数log.retention.bytes来指定,如果一个包含8个分区的主题,并且这个值被设为被设为1GB,那么这个主题最多可以保留8GB的数据。 两个参数条件满足一个就删除
  4. log.segment.bytes日志片段,当日志片段大小达到log.segment,bytes指定的上限(默认是1GB)时,当前日志片段就会被关闭,新的日志片段就会被打开,日志片段被关闭,就会等待过期。
  5. log.segment.ms 控制日志片段关闭时间。指定了多长时间后日志片段会被关闭。
  6. message.max.bytes broker通过设置message.max.bytes参数来限制单个消息的大小。默认是1MB,如果生产者尝试发送超过这个大小的消息,消息不会被接受,还会收到broker反馈的错误信息。该参数指的是压缩后的消息大小,也就是说只要压缩后的消息小于message.max.bytes指定的值,消息的实际大小可以远大于这个值。

生产者的属性配置

有三个必选的属性

  1. bootstrap.servers 指定broker的地址清单,地址的格式为host:port。
  2. key.serializer 必须被设置为一个实现了org.apache.kafka.common.serlization.serializer接口的类。生产者会用这个类把键对象序列化成字节数组 kafka默认提供了ByteArraySerializer、StringSerializer、IntegerSerializer
  3. value.serializer

下面的属性不为必选属性

  1. acks指定了必须要有多少个分区副本收到消息,生产者才会认为消息写入是成功的
  2. buffer.memory用来设置生产者内存缓冲区的大小,生产者用它缓冲要发送到服务器的消息。
  3. commpression.type 指定了消息在被发送给broker之前使用哪一种压缩算法进行压缩。
  4. retries 决定了生产者可以重新发送消息的次数。
  5. batch.size当有多个消息需要发送到同一个分区时,生产者会把他们放在同一个批次里面。该参数指定了一个批次可以使用的内存大小,当批次被填满时,批次里面的所有消息将会被发送出去。
  6. linger.ms 指定了生产者在发送批次之前等待更多消息加入批次的时间。
  7. clinet.id该参数可以是任意的字符串,服务器用它来识别消息的来源。还可以用在日志和配额指标里面。
  8. max.in.flight.requests.per.connection该参数指定了生产者在收到服务器响应之前可以发送多少个消息。
  9. request.timeout.ms 指定了生产者在发送数据时等待服务器返回响应的时间
  10. metadata.fetch.timeout.ms指定了生产者在获取元数据时等待服务器返回响应的时间。
  11. timeout.ms指定了broker等待同步副本返回消息确认的时间。如果在指定时间内没有收到同步副本的确认,那么broker就回返回一个错误。
  12. max.block.ms指定了在调用send()方法或使用partitionsFor()方法获取元数据时生产者的阻塞时间,阻塞时间达到max.block.ms时,生产者会抛出超时异常。
  13. max.request.size控制生产者发送的请求大小。能发送的单个消息的最大值,也值单个请求里所有消息总的大小。
  14. receive.buffer.bytes 和 send.buffer.bytes 分别指定了TCP socket接收和发送数据包的缓冲区大小,如果被设置为-1,就使用操作系统的默认值。

消费者的属性配置

  1. fetch.min.bytes 指定了消费者从服务器获取记录的最小字节数。如果消费者的数量比较多,把该属性设置大一点可以降低broker的工作负载。
  2. fetch.max.wait.ms 用于指定broker的等待时间,默认是500ms。如果fetch.max.wait.ms被设置为100ms而 fetch.min.bytes被设置为1MB,kafka在收到消费者的请求后,要么返回1MB的数据,要么在100ms后返回所有可用数据,看哪个条件先得到满足。
  3. max.partition.fetch.bytes 该属性指定了服务器从每个分区里返回给消费者的最大字节数。max.partition.fetch.bytes的值必须比broker能够接受的最大消息的字节数大,否则消费者可能无法读取这些消息,导致消费者一直挂起重试。另一个要考虑的因素是消费者处理数据的时间,如果单次调用poll()返回的数据太多,如果出现这种情况,可以把max.partition.fetch.bytes值改小,或者延长会话过期时间。
  4. session.timeout.ms 该属性指定了消费者在被认为死亡之前可以与服务器断开连接的时间,默认是3s。该属性与heartbeat.interval.ms相关,heartbeat.interval.ms指定了poll()方法向协调器发送心跳的频率。session.timeout.ms则指定了消费者可以多久不用发送心跳。heartbeat.interval.ms一般是session.timeout.ms的三分之一
  5. auto.offset.reset该属性指定了消费者在读取一个没有偏移量的分区或者偏移量无效的情况下该做如何处理,默认值是lastest,意思是在偏移量无效的情况下,消费者将从最新的记录开始读取数据。另一个值是earliest,也就是说在偏移量无效的情况下,消费者将从起始位置读取分区的记录。
  6. enable.auto.commit 该属性指定了消费者是否自动提交偏移量,默认值是true。为了尽量避免出现重复数据和数据丢失,可以设置为false,由自己控制何时提交偏移量,如果设置为true,还可以通过配置auto.commit.interval.ms属性来控制提交的频率。
  7. partition.assignment.strategy 决定哪些分区该被分配给哪个消费者,kafka有两个默认的分配策略
  • Range 该策略会把主题的若干个连续的分区分配给消费者
  • RoundRobin 该策略把主题的所有分区逐个分配给消费者。一般来说,如果所有消费者都订阅相同的主题,RoundRobin策略会给所有消费者分配相同数量的分区,可以通过设置partition.assigment.strategy来选择分区的策略,默认使用的是org.apache.kafka.clients.consumer.RangeAssignor 这个类实现了Range策略,可以自定义策略,属性的值就是自定义类的名字。
  1. client.id 该属性可以是任意字符串,broker用它来标识从客户端发送过来的消息。
  2. max.poll.records 用于控制单次调用 call()方法能够返回的记录数量,可以帮你控制在轮询里需要处理的数据量。
  3. receive.buffer.bytes和send.buffer.bytes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大模型的艺术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值