1 生产者配置参数:
kafka.producer.retries 当生产者发送失败的时候重试的次数,大多数情况下,如果kafka生产端发送的数据是在异步事件队列里边,这个数据设置成1,重试交给异步对接即可
kafka.producer.batch.size kafka发送端批量发送的的缓存大小,默认是16kB,意思是缓存中的数据达到配置的数值大小,kafka的生产端发送数据,这个参数一般和kafka.producer.linger配合使用
kafka.producer.linger代表发送延时,默认延时时间是0s,接到消息立刻发送,一般对于吞吐量要求不高的生产端,不设置这个数值,对于吞吐量要求高,实时性要求不高的生产端,可以配置下延迟时间,和上一个参数一起使用
kafka.producer.batch.size小,吞吐量低,延时低,kafka.producer.batch.size大,吞吐量高,延时高
kafka.producer.buffer.memory指定producer端用于缓存消息的缓冲区的大小,单位是字节,默认32M,采用异步发送消息的架构,Java版Producer启动时会首先创建一块内存缓冲区用于保存待发送消息,然后由另一个专属线程负责从缓冲区中读取消息执行真正的发送,这部分内存空间的大小就是由buffer.memory参数指定。该参数指定的内存大小几乎可以认为是producer程序使用的内存大小,若producer程序要给很多分区发送消息,那么就需要仔细设置该参数防止过小的内存缓冲区降低了producer程序整体的吞吐量
kafka.producer.request.timeout.ms当producer发送请求给broker后,broker需要在规定时间范围内将处理结果返回给producer。超时时间默认30s。
2 kafka 三种容错方式配置
spring.kafka.producer.acks
1 当上边参数设置成0,producer端不确定消息是否发送成功,只是发出去,并不等待broker返回响应,数据可能丢失,但是优势是对于吞吐量高,不要求保证完整一致性的需求来说(比如日志处理),这是好的方式
2 当上边参数设置成1,表示producer会在leader partition收到消息时得到broker的一个确认,这样会有更好的可靠性,因为客户端会等待知道broker确认收到消息。此时,当发送消息时,leader broker仅将该消息写入本地日志,然后便发送响应结果给producer,而无需等待ISR中其他副本写入该消息;
3当上边参数设置成-1或者all,producer会在所有备份的partition收到消息时得到broker的确认,这个设置可以得到最高的可靠性保证。此时,当发送消息时,leader broker不仅会将消息写入本地日志,同时还会等待ISR中所有其他副本都成功写入它们各自的本地日志后,才发送响应结果给producer。
3 kafka消费端配置
kafka.consumer.enable.auto.commit 这个参数非常重要,主要是控制kafka是自动提交偏移量还是手动提交偏移量,为true的时候自动提交偏移量,为false的时候手动提交偏移量,不过springboot一个坑爹的地方是,当这个参数设置成false的时候,spring-kafka包会帮助用户更新offset数值,造成用户手动提交失败,offset偏移量依旧增加的情景,这样,数据就“丢失”了
kafka.consumer.auto.commit.interval 自动提交间隔,如果上一个参数设置成false,这个字段就没用了
kafka.consumer.auto.offset.reset 这个字段定义消费顺序
earliest
当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费
latest
当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据
none
topic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的offset,则抛出异常
这个字段详细解释请参考另一篇文章:
https://blog.csdn.net/lishuangzhe7047/article/details/74530417