试着理解Kafka的一致性维护。请找出场景并帮助理解。
Number of partition = 2 Replication factor = 3 Number of broker in the cluster = 4
Number of partition = 2
Replication factor = 3
Number of broker in the cluster = 4
在这种情况下,为了实现强一致性,应该确认多少个节点。或者 ack = all 或者 ack = 3 或任何其他值。请确认相同。
ack = all
ack = 3
agyaoht71#
在你的环境中,你所拥有的是4个经纪人复制因子=3这意味着给定分区中的每条消息将被复制到4个代理中的3个,包括该分区的前导。为了获得强大的一致性保证,必须设置 min.insync.replicas 到2并使用 acks=all . 这样,您就可以保证每次写入都会发送到保存数据的3个代理中的至少2个代理,在这些代理之前,数据会得到确认。将acks设置为all可以提供最高的一致性保证,但代价是对集群的写入速度较慢。如果你使用Kafka的旧版本,在那里不干净的领导人选举 true 默认情况下,您还应该考虑将其设置为 false 明确地。这样,一个不同步。如果领导者崩溃(有效地降低了可用性),代理将不会被选为领导者。此外,Kafka是一个系统,所有的阅读通过领导人。这与其他一些分布式系统(如支持读取副本的zookeeper)有些不同。因此,您不会遇到客户机直接从过时的代理读取数据的情况。leader确保对写入进行排序并将其复制到指定数量的同步副本,并根据您的请求进行确认 acks 设置。
min.insync.replicas
acks=all
true
false
acks
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开始)来实现一次处理
acks=1
acks=3
min.insync.replicas=2
3
2
all
enable.idempotence=true
bwitn5fc3#
如果您在acid属性领域中寻找一致性,则需要确认所有副本。因为您有3个副本,所以应该确认所有这3个节点。
3条答案
按热度按时间agyaoht71#
在你的环境中,你所拥有的是
4个经纪人
复制因子=3
这意味着给定分区中的每条消息将被复制到4个代理中的3个,包括该分区的前导。
为了获得强大的一致性保证,必须设置
min.insync.replicas
到2并使用acks=all
. 这样,您就可以保证每次写入都会发送到保存数据的3个代理中的至少2个代理,在这些代理之前,数据会得到确认。将acks设置为all可以提供最高的一致性保证,但代价是对集群的写入速度较慢。
如果你使用Kafka的旧版本,在那里不干净的领导人选举
true
默认情况下,您还应该考虑将其设置为false
明确地。这样,一个不同步。如果领导者崩溃(有效地降低了可用性),代理将不会被选为领导者。此外,Kafka是一个系统,所有的阅读通过领导人。这与其他一些分布式系统(如支持读取副本的zookeeper)有些不同。因此,您不会遇到客户机直接从过时的代理读取数据的情况。leader确保对写入进行排序并将其复制到指定数量的同步副本,并根据您的请求进行确认
acks
设置。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开始)来实现一次处理
bwitn5fc3#
如果您在acid属性领域中寻找一致性,则需要确认所有副本。因为您有3个副本,所以应该确认所有这3个节点。