客户端参数配置建议
Kafka客户端的配置参数很多,以下提供Producer和Consumer几个常用参数配置。
参数 |
默认值 |
推荐值 |
说明 |
---|---|---|---|
acks |
1 |
高可靠:all 高吞吐:1 |
收到Server端确认信号个数,表示procuder需要收到多少个这样的确认信号,算消息发送成功。acks参数代表了数据备份的可用性。常用选项:
|
retries |
0 |
结合实际业务调整 |
客户端发送消息的重试次数。值大于0时,这些数据发送失败后,客户端会重新发送。 注意,这些重试与客户端接收到发送错误时的重试没有什么不同。允许重试将潜在的改变数据的顺序,如果这两个消息记录都是发送到同一个partition,则第一个消息失败第二个发送成功,则第二条消息会比第一条消息出现要早。 |
request.timeout.ms |
30000 |
结合实际业务调整 |
设置一个请求最大等待时间,超过这个时间则会抛Timeout异常。 超时时间如果设置大一些,如120000(120秒),高并发的场景中,能减少发送失败的情况。 |
block.on.buffer.full |
TRUE |
TRUE |
TRUE表示当我们内存用尽时,停止接收新消息记录或者抛出错误。 默认情况下,这个设置为TRUE。然而某些阻塞可能不值得期待,因此立即抛出错误更好。如果设置为false,则producer抛出一个异常错误:BufferExhaustedException |
batch.size |
16384 |
262144 |
默认的批量处理消息字节数上限。producer将试图批处理消息记录,以减少请求次数。这将改善client与server之间的性能。不会试图处理大于这个字节数的消息字节数。 发送到brokers的请求将包含多个批量处理,其中会包含对每个partition的一个请求。 较小的批量处理数值比较少用,并且可能降低吞吐量(0则会仅用批量处理)。较大的批量处理数值将会浪费更多内存空间,这样就需要分配特定批量处理数值的内存大小。 |
buffer.memory |
33554432 |
67108864 |
producer可以用来缓存数据的内存大小。如果数据产生速度大于向broker发送的速度,producer会阻塞或者抛出异常,以“block.on.buffer.full”来表明。 这项设置将和producer能够使用的总内存相关,但并不是一个硬性的限制,因为不是producer使用的所有内存都是用于缓存。一些额外的内存会用于压缩(如果引入压缩机制),同样还有一些用于维护请求。 |
参数 |
默认值 |
推荐值 |
说明 |
---|---|---|---|
auto.commit.enable |
TRUE |
FALSE |
如果为TRUE,consumer所fetch的消息的offset将会自动的同步到zookeeper。这项提交的offset将在进程无法提供服务时,由新的consumer使用。 约束: 设置为FALSE后,需要先成功消费再提交,这样可以避免消息丢失。 |
auto.offset.reset |
latest |
earliest |
没有初始化offset或者offset被删除时,可以设置以下值: earliest:自动复位offset为最早 latest:自动复位offset为最新 none:如果没有发现offset则向消费者抛出异常 anything else:向消费者抛出异常。 |
connections.max.idle.ms |
600000 |
30000 |
空连接的超时时间,设置为30000可以在网络异常场景下减少请求卡顿的时间。 |