面试题答案
一键面试batch.size
- 作用:指定了生产者在将消息批次发送到服务器之前,缓冲区中可以积累的最大字节数。当缓冲区达到这个大小,生产者会把消息发送出去。增大这个值可以提高吞吐量,因为可以一次性发送更多消息,但也可能会增加消息的延迟,因为需要等待缓冲区填满。例如,如果设置过小,可能频繁发送小批次消息,增加网络开销;设置过大,消息等待时间变长。
linger.ms
- 作用:生产者在发送批次之前等待更多消息加入批次的时间(以毫秒为单位)。即使缓冲区没有达到
batch.size
,只要等待时间达到linger.ms
,生产者也会发送消息。这个参数有助于减少不必要的网络请求,合并小的消息批次,提高吞吐量。比如设置为0,消息会立即发送;设置较大值,可进一步合并消息,但可能导致消息延迟增加。
acks
- 作用:指定了生产者在确认消息已成功发送到Kafka之前需要等待的确认数。
acks=0
:生产者在发送消息后不等待任何确认,只管把消息发出去,这种方式吞吐量最高,但可能会丢失消息,因为不知道消息是否真正到达了Kafka。acks=1
:生产者在leader副本接收到消息并写入本地日志后就认为消息发送成功。如果在follower副本同步之前leader副本发生故障,消息可能丢失。acks=all
或acks=-1
:生产者在所有同步副本都接收到消息后才认为消息发送成功。这种方式可以保证消息的持久性,但吞吐量会有所下降,因为需要等待所有副本确认。