1. 首页
  2. 大数据
  3. Kafka教程

【Kafka教程】(七)Kafka生产参数调优

调优在大数据中是非常重要的,任何一个组件都离不开调优,调优能让你充分利用资源,减少故障的发生等。本文讲解Kafka实际生产中的调优参数。
KAFKA调优可以从三个角度来看,Producer\Broker\Consumer。
通常,我们都是在官网kafka配置中,通过配置文档、来了解有哪些参数可能可以进行调优。
【Kafka教程】(七)Kafka生产参数调优

Producer

调优没有固定值,要根据集群规模,数据量,业务需求来调。因此我都是只给出参考值。

  • acks: 在Kafka消息传递语义及一致性中我们已经讲解过此参数,设置为all是最可靠的保证。
  • buffer.memory: 生产者可以用来缓冲等待发送到服务器的记录的内存的总字节数,简单说就是缓冲区大小。默认32M,可以调大一点。
  • max.request.size: 发送一条消息的最大大小
  • compression.type :设置压缩,压缩的好处不用多说,减少磁盘IO、减少存储所需空间等等。比如可以设置为snappy。
  • retries: 重试次数,将值设置为大于零将导致客户端重新发送任何发送失败的记录。默认是0,我们可以设置为100。
  • batch.size: 批处理大小(字节为单位)。发送消息并不是说来一条我就发一条,会一个批次一个批次的发,这有助于提高客户机和服务器的性能。此参数就是设置批次大小。默认16384。可以调大一点。
  • linger.ms:kafka.producer 会将两个请求发送时间间隔内到达的记录合并到一个单独的批处理请求中。这个设置为批处理的延迟提供了上限:一旦我们接受到记录超过了分区的 batch.size ,Producer 会忽略这个参数,立刻发送数据。但是如果累积的字节数少于 batch.size ,那么我们将在指定的时间内“逗留”(linger),以等待更多的记录出现。
  • request.timeout.ms :配置控制客户端等待请求响应的最大时间量。如果在超时之前没有收到响应,客户端将在必要时重新发送请求,如果重试结束,则将失败请求。经验:跟超时时间有关的,都调大几倍。
  • delivery.timeout.ms:报告成功或失败的时间上限。应该大于linger.ms + request.timeout.ms。
  • max.block.ms:控制了KafkaProducer.send()和KafkaProducer.partitionsFor()将会阻塞多长时间。由于缓冲区已满或元数据不可用,可以阻塞这些方法。建议调大一点此参数。
  • max.in.flight.requests.per.connection=1:防止乱序可以配置该参数来避免,它限制客户端在单个连接上能够发送的未响应请求的个数。设置此值为1表示kafka broker在响应请求之前client不能再向同一个broker发送请求,但吞吐量会下降。

Broker

  • zookeeper.session.timeout.ms:zk超时时间。关于timeout的都要调大一点。
  • num.replica.fetchers:从源复制消息的线程数量。增加这个值可以增加follower broker中I/O并行度。可以略微调大点。
  • log.flush.interval.messages :任何主题中的消息在刷新到磁盘之前被保存在内存中的最大时间消息数量
  • log.flush.interval.ms:消息在刷新到磁盘之前被保存在内存中的最大时间
  • auto.create.topics.enable:是否允许自动创建 Topic。建议false
  • unclean.leader.election.enable:是否允许 Unclean Leader 选举。建议false
  • auto.leader.rebalance.enable:是否允许定期进行 Leader 选举。建议false
  • log.retention.{hour|minutes|ms}:这是个“三兄弟”,都是控制一条消息数据被保存多长时间。从优先级上来说 ms 设置最高、minutes 次之、hour 最低。
  • log.retention.bytes:这是指定 Broker 为消息保存的总磁盘容量大小。
  • message.max.bytes :服务器可以接收的一条消息的最大大小。

Consumer

  • max.partition.fetch.bytes :每次从单个分区中拉取的消息最大数量(单位byte),建议调大点,比如5242880。
  • request.timeout.ms:会话超时时间。有关timeout的都调大一点
  • session.timeout.ms:请求超时时间。有关timeout的都调大一点
  • heartbeat.interval.ms:每次心跳的间隔时间。心跳被用来确保消费者的会话保持活跃,并在新消费者加入或离开群体时促进再平衡。值的设置必须低于session.timeout。ms,但通常应该设置不超过该值的1/3。它可以调整更低,以控制预期时间的正常重新平衡。
  • receive.buffer.bytes:读取数据的缓冲区大小。可以调大点。

BDStar原创文章。发布者:Liuyanling,转载请注明出处:http://bigdata-star.com/archives/1643

发表评论

登录后才能评论

联系我们

562373081

在线咨询:点击这里给我发消息

邮件:562373081@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code