含义rf=3,byt Min.insyce.replica=1,当procuder设置ack=1时,我想确保只需要领导者获得数据,然后就可以很好地进行合作。
然而,我确实看到它是默认的,即使我用命令把它设置得更低。它自动显示为这样。
Topic:isr-set1 PartitionCount:6 ReplicationFactor:3 Configs:min.insync.replicas=1
Topic: isr-set1 Partition: 0 Leader: 3 Replicas: 3,1,5 Isr: 3,1,5
Topic: isr-set1 Partition: 1 Leader: 4 Replicas: 4,5,3 Isr: 4,5,3
Topic: isr-set1 Partition: 2 Leader: 0 Replicas: 0,3,4 Isr: 0,3,4
Topic: isr-set1 Partition: 3 Leader: 2 Replicas: 2,4,0 Isr: 2,4,0
我期待类似的东西:
Topic:isr-set1 PartitionCount:6 ReplicationFactor:3 Configs:min.insync.replicas=1
Topic: isr-set1 Partition: 0 Leader: 3 Replicas: 3,1,5 Isr: 3
Topic: isr-set1 Partition: 1 Leader: 4 Replicas: 4,5,3 Isr: 4
Topic: isr-set1 Partition: 2 Leader: 0 Replicas: 0,3,4 Isr: 0
Topic: isr-set1 Partition: 3 Leader: 2 Replicas: 2,4,0 Isr: 2
ISR表示同步副本,它可以等于或低于复制因子,但您无法控制它。
如果您使用replication factor = 3
创建一个主题,这意味着Kafka将该主题分区日志保存在3个不同的地方。为了保存在3个不同的地方,追随者副本需要与分区的领导者副本同步。CCD_ 2或CCD_。有多少个副本与领导者同步。
但在您的情况下,您将Min ISR
配置为1。这意味着当你用ack=all
生成数据时,它会在Kafka中查看是否至少有min ISR
个副本与leader同步,包括leader。如果没有,它将返回一个错误,并且不会生成。
如果您只需要Leader可用性,则不考虑此Min ISR
。在生成消息时也不考虑ISR。所以,如果您不需要复制(同步副本),只需使用replication factor = 1
创建主题即可。但这太冒险了,因为该主题分区没有容错能力。
复制
Kafka在可配置的服务器数量(您可以在逐个主题的基础)。这允许自动故障切换到当群集中的服务器出现故障,因此保留消息时进行复制在出现故障时可用。
min.insync.副本
当生产者将ack设置为"0"时;所有";(或"-1")指定必须确认写入的最小副本数写入被认为是成功的。如果这个最小值不能如果满足,则制片人将提出一个异常(NotEnoughReplicas或NotEnough ReplicasAfterAppend)。使用时min.insync.replicas和acks一起允许您强制耐久性保证。一个典型的场景是创建一个主题复制因子为3时,将min.insync.replicas设置为2,并且用";所有";。这将确保生产商如果大多数复制副本没有接收到写入,则会出现异常。