bootstrap.servers |
kafka集群地址,ip+端口,以逗号隔开。不管这边配置的是什么服务器,客户端会使用所有的服务器。配置的列表只会影响初始发现所有主机。配置的格式应该是:ip:port,ip:port,因为配置的内容只是用于服务集群的初始发现(集群地址可能会变化),配置可以不包含所有的服务器(你可能需要配置多于一个,防止某个服务挂掉) |
list |
|
key.serializer |
实现Serializer接口的序列化类键 |
class |
|
value.serializer |
实现Serializer接口的序列化类值 |
class |
|
acks |
生产者认为一个请求完成,所需要kafka集群主服务的应答次数。这个配置控制已发送消息的持久性。下面是这个配置可能的值。acks=0:如果设置为0,生产者不会等待kafka的响应。消息会被立刻加到发送缓冲通道中,并且认为已经发送成功。这种情况下,不能保证kafka接收到了这条消息,retries配置不会生效,每条消息的偏移量都是1;acks=1:这个配置意味着kafka会把这条消息写到本地日志文件中,但是不会等待集群中其他机器的成功响应。这种情况下,在写入日志成功后,集群主机器挂掉,同时从机器还没来得及写的话,消息就会丢失掉。acks=all:这个配置意味着leader会等待所有的follower同步完成。这个确保消息不会丢失,除非kafka集群中所有机器挂掉。这是最强的可用性保证。 |
string |
1 |
buffer.memory |
生产者等待发送到kafka的消息队列占用内容的大小。如果消息发送的速度比传输给kafka快,生产者会在抛出异常后,阻塞max.block.ms的时间。这个配置应该大体与生产者用到的内存差不多,但不全是,因为生产者使用的内存不全部用于消息队列。还有些内存会被用于压缩和保持长连接。 |
long |
33554432 |
compression.type |
生产者的数据压缩类型。默认是不压缩(no compression)。有效的配置可以是none,gzip,snappy或lz4。压缩是数据的批量压缩,所以批量的效果也就是压缩的比例(压缩的比例越好,数据量越小)。 |
string |
none |
retries |
配置为大于0的值的话,客户端会在消息发送失败时重新发送。重试等同于在发送有异常时重新发送消息。如果不把max.in.flight.requests.per.connection设为1,重试可能会改变消息的顺序。两条消息同时发送到同一个分区,第一条失败了,并在第二条发送成功后重新发送,那么第二条消息可能在第一条消息前到达。 |
int |
0 |
ssl.key.password |
存在文件中的私钥密码,对于生产者来说可选。 |
password |
null |
ssl.keystore.location |
存储私钥的文件地址,可以用于不同客户端的认证。 |
string |
null |
ssl.keystore.password |
私钥文件存储密码。只有当ssl.keystore.location配置了,才有用。 |
password |
null |
ssl.truststore.location |
信任存储文件路径。 |
string |
null |
ssl.truststore.password |
信任存储文件密码 |
password |
null |
batch.size |
当多条消息需要发送到同一个分区时,生产者会尝试合并网络请求。这会提高client和生产者的效率。如果消息体大于这个配置,生产者不会尝试发送消息。发送给kafka的消息包含不同的批次,每批发送给一个分区。批次大小太小的话可能会降低吞吐量。如果设为0,会禁用批处理功能。如果批次设置很大,可能会有些浪费内存,因为我们会预留这部分内存用于额外的消息。 |
int |
16384 |
client.id |
发送请求给kafka时带上的生产者标识。目的是为了在ip+端口之外,通过逻辑上的应用名称跟踪请求,以便记录在kafka日志中。 |
string |
"" |
connections.max.idle.ms |
在配置项的时间之后,关闭空闲的链接 |
long |
540000 |
linger.ms |
消息延迟发送的毫秒数,目的是为了等待多个消息,在同一批次发送,减少网络请求。 |
long |
0 |
max.block.ms |
这个配置控制KafkaProducer.send()和KafkaProducer.partitionsFor()的阻塞时间,当缓冲区空间不够或者源数据丢失时阻塞 |
int |
60000 |
max.request.size |
生产者一次请求的最大字节数,这也是一次消息体的最大值。注意到kafka集群有自己的消息限制,可能与这个值不一样。这个配置限制的是生产者一次发送消息的大小,为的是避免发送大的数据量。 |
int |
1048576 |
partitioner.class |
实现Partitioner接口的分区类 |
class |
class org.apache.kafka.clients.producer.internals.DefaultPartitioner |
receive.buffer.bytes |
socket接收缓存空间的大小,读数据时用 |
int |
32768 |
request.timeout.ms |
生产者发送消息后等待响应的最大时间,如果在配置时间内没有得到响应,生产者会重试。 |
int |
30000 |
timeout.ms |
kafka集群的leader等待follower响应的超时时间。 |
int |
30000 |