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