【Kafka系列】可靠性相关参数

252 阅读2分钟

acks,生产者客户端参数

  • acks=1,只要leader副本成功写入本地日志,就会告知生产者已经成功提交。

    ISR 集合的 follower 副本,还未拉取到leader中新写入的消息,leader就宕机了,那么发送的消息会丢失。

  • acks=-1(all),leader副本成功写入日志后,还要等ISR中全部副本同步完成才会告知生产者已经成功提交。

    在极端情况下,acks=-1会演变成 acks=1 的情形,此时可以通过设置 ISR 集合的最小副本数(min.insync.replicas)来避免

retries,客户端重试机制

  • retries=0,默认值,不重试

  • retries>0,retry.backoff.ms,用来设置两次重试之间的时间间隔,retries>0 会导致的问题

    可能会影响消息的顺序性,max.in.flight.requests.per.connection,默认值为5,如果放弃吞吐,可以将该值设为1

    增加客户端对于异常的反馈时延。

unclean.leader.election.enable

  • false,默认值由原来的true改为了false,会影响可用性但是提高了可靠性
  • true,当leader 下线时,可以从非ISR集合中选举出新的 leader

同步刷盘策略

broker端的两个参数 log.flush.interval.messages 和 log.flush.interval.ms,用来调整同步刷盘策略

默认值是不做控制而是交给操作系统本身进行处理

enable.auto.commit,位移提交

  • true,默认值,开启自动位移提交功能。可能会造成重复消费和消息丢失问题。

  • false,手动位移提交。当消息没有被成功消费,不能提交所对应的消费位移,可结合死信、回溯消费来提高可靠性。

    如果为了保证高可靠性,需要将参数设置为 false 来执行手动位移提交,宁可重复消费也不因消费异常而导致消息丢失。