生产端重要参数:

  1. bootstrap.servers
    配置Kafka broker的服务器地址列表,多个用英文逗号分开,可以不必写全,Kafka内部有自动感知Kafka broker的机制。
  2. client.dns.lookup
    客户端寻找bootstrap地址的方式,支持如下两种方式:
    1. resolve_canonical_bootstrap_servers_only
      这种方式,会依据bootstrap.servers提供的主机名(hostname),根据主机上的名称服务返回其IP地址的数组(InetAddress.getAllByName),然后依次获取inetAddress.getCanonicalHostName(),再建立tcp连接。
      一个主机可配置多个网卡,如果启用该功能,应该可以有效利用多网卡的优势,降低Broker的网络端负载压力
    2. use_all_dns_ips
      这种方式会直接使用bootstrap.servers中提供的hostname、port创建tcp连接,默认选项。
  3. compression.type
    消息的压缩算法,目前可选值:none、gzip、snappy、lz4、zstd,默认不压缩,建议与Kafka服务器配置的一样,当然Kafka服务端可以配置的压缩类型为 producer,即采用与发送方配置的压缩类型。发送方与Broker 服务器采用相同的压缩类型,可有效避免在Broker服务端进行消息的压缩与解压缩,大大降低Broker的CPU使用压力。
  4. client.id
    客户端ID,如果不设置默认为producer-递增,强烈建议设置该值,尽量包含ip,port,pid。
  5. send.buffer.bytes
    网络通道(TCP)的发送缓存区大小,默认为128K。
  6. receive.buffer.bytes
    网络通道(TCP)的接收缓存区大小,默认为32K。
  7. reconnect.backoff.ms
    重新建立链接的等待时长,默认为50ms,属于底层网络参数,基本无需关注。
  8. reconnect.backoff.max.ms
    重新建立链接的最大等待时长,默认为1s,连续两次对同一个连接建立重连,等待时间会在reconnect.backoff.ms的初始值上成指数级递增,但超过max后,将不再指数级递增。
  9. key.serializer
    消息key的序列化策略,为org.apache.kafka.common.serialization接口的实现类。
  10. value.serializer
    消息体的序列化策略
  11. partitioner.class
    消息发送队列负载算法,其默 DefaultPartitioner,路由算法如下:
    1. 如果指定了 key ,则使用 key 的 hashcode 与分区数取模。
    2. 如果未指定 key,则轮询所有的分区。
  12. interceptor.classes
    拦截器列表,kafka运行在消息真正发送到broker之前对消息进行拦截加工。
  13. enable.idempotence
    是否开启发送端的幂等,这个机制后续会重点剖析其实现原理,默认为false。
  14. transaction.timeout.ms
    事务协调器等待客户端的事务状态反馈的最大超时时间,默认为60s。
  15. transactional.id
    事务id,用于在一个事务中唯一标识一个客户端。