【Kafka】Producer配置
2017-08-29 本文已影响1575人
端木轩
名称 | 描述 | 类型 | 默认值 |
---|---|---|---|
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 |