如何在Kafka中实现强大的一致性?

ggazkfy8  于 2021-06-07  发布在  Kafka
关注(0)|答案(3)|浏览(406)

试着理解Kafka的一致性维护。请找出场景并帮助理解。

  1. Number of partition = 2
  2. Replication factor = 3
  3. Number of broker in the cluster = 4

在这种情况下,为了实现强一致性,应该确认多少个节点。或者 ack = all 或者 ack = 3 或任何其他值。请确认相同。

agyaoht7

agyaoht71#

在你的环境中,你所拥有的是
4个经纪人
复制因子=3
这意味着给定分区中的每条消息将被复制到4个代理中的3个,包括该分区的前导。
为了获得强大的一致性保证,必须设置 min.insync.replicas 到2并使用 acks=all . 这样,您就可以保证每次写入都会发送到保存数据的3个代理中的至少2个代理,在这些代理之前,数据会得到确认。
将acks设置为all可以提供最高的一致性保证,但代价是对集群的写入速度较慢。
如果你使用Kafka的旧版本,在那里不干净的领导人选举 true 默认情况下,您还应该考虑将其设置为 false 明确地。这样,一个不同步。如果领导者崩溃(有效地降低了可用性),代理将不会被选为领导者。
此外,Kafka是一个系统,所有的阅读通过领导人。这与其他一些分布式系统(如支持读取副本的zookeeper)有些不同。因此,您不会遇到客户机直接从过时的代理读取数据的情况。leader确保对写入进行排序并将其复制到指定数量的同步副本,并根据您的请求进行确认 acks 设置。

rsaldnfx

rsaldnfx2#

你可能会有兴趣看到什么时候,绝对的,肯定的,有来自Kafka峰会的谈话。
这是由cloudera的一位工程师给出的,cloudera有自己关于Kafka可用性的文档
总而言之,多于1个副本和多于1个同步副本是一个好的开始。然后在producer上,如果您愿意为数据可用性牺牲吞吐量,这意味着您必须在继续之前写入所有副本,那么 acks=all . 否则,如果你相信领导经纪人是高度可用的不洁的领导人选举是假的,那么 acks=1 大多数情况下应该没问题。 acks=3 不是有效的配置。我想你在找 min.insync.replicas=2 以及 acks=all 复制因子为 3 ; 从上面链接
如果 min.insync.replicas 设置为 2 以及 acks 设置为 all ,每个消息必须成功写入至少两个副本。这保证了消息不会丢失,除非两个主机都崩溃
此外,您还可以启用事务生产者(从kafka0.11开始)来实现一次处理

  1. enable.idempotence=true
bwitn5fc

bwitn5fc3#

如果您在acid属性领域中寻找一致性,则需要确认所有副本。因为您有3个副本,所以应该确认所有这3个节点。

相关问题