Apache kafka transaction.state.log.min.isr的确切含义是什么?

Apache kafka transaction.state.log.min.isr的确切含义是什么?,apache-kafka,Apache Kafka,在所有的场景中,如果任何一个卡夫卡经纪人启动并运行我的制作人和消费者都应该正常运行 server.properties中的参数用于群集的高可用性 transaction.state.log.min.isr=2 offsets.topic.replication.factor=3 transaction.state.log.replication.factor=3 如果所有3个卡夫卡代理(K1、K2和K3)都已启动,则集群运行正常 若K1和K2代理下降,而只有K3上升,那个么集群运行正常 如果所

在所有的场景中,如果任何一个卡夫卡经纪人启动并运行我的制作人和消费者都应该正常运行

server.properties
中的参数用于群集的高可用性

transaction.state.log.min.isr=2
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
  • 如果所有3个卡夫卡代理(K1、K2和K3)都已启动,则集群运行正常
  • 若K1和K2代理下降,而只有K3上升,那个么集群运行正常
  • 如果所有服务器都关闭,我们启动K1代理,集群将停止接收消息,消费者也将停止
  • 如果我遗漏了什么,请告诉我,如果我设置了
    transaction.state.log.min.isr=3怎么办


    提前感谢。

    transaction.state.log.min.isr只是专用的min.insync.replications,但用于_transaction_state主题(在开始使用事务时创建的内部主题)。所以它只是覆盖了min.insync.replicas

    也许您已经知道了,但是将min.insync.replicas设置为2意味着当您的制作者(acks=all)将生成特定主题的记录时,相应的代理将等待两个ISR确认写入(这里是leader和一个replica)

    与transaction.state.log.min.isr的行为完全相同,但这仅适用于_transaction_state内部主题

    因此,当复制因子为3时,将其设置为2是有意义的

    但是,我不太明白你的意思:

    如果所有3个卡夫卡代理(K1、K2和K3)都已启动,则集群运行正常。 ==>确实如此

    若K1和K2代理下降,而只有K3上升,那个么集群运行正常

    ==>您将无法生成(acks=all或>1)新记录,因为无法满足复制系数

    此外,在生产/消费时,您将无法创建新主题(将获得无效的\u复制\u因子)


    您的集群肯定不正常

    事务.state.log.min.isr所做的是覆盖事务主题-
    \u事务\u状态的
    min.insync.replicas
    配置

    基本上,它控制该主题的最低ISR。在你提到的场景中-

    若K1和K2代理下降,而只有K3上升,那个么集群运行正常

    群集将不正常,您将无法生成此群集。制作人将引发
    notenoughreplications
    异常。 这将发生,因为您没有满足所做的配置

    例如,您在一个名为
    myoltopic
    的主题上使用了3的复制因子,并且您的代理被设置为
    min.insync.replications
    的2

    当生成到
    myoltopic
    (使用
    acks=all/-1
    )时,您需要至少有2个副本,必须确认写入,才能将其视为成功写入

    因此,如果要将
    min.insync.replications
    更改为3,则需要向集群添加更多代理


    您可以在Confluent博客中阅读更多关于Kafka复制的信息,并查看(跳转到
    min.insync.replications
    )。

    Yannick,感谢您的回复,但声明“您将无法生成(使用acks=all或>1)新记录,因为复制系数将无法满足”,这意味着所有代理都应该启动并运行,只有我们才能实现复制因子3。但在这种情况下,如何实现代理故障转移?我的意思是,如果您的生产商使用值高于1(比如2)的ack,当它将发送写入时,至少2个isr应该确认此写入,但如果您只有1个代理处于活动状态(在您的场景中),此时,他们将无法确认,因此您将收到一条错误消息。但是如果你的制作人不关心ACK,它将能够生产。“实现故障转移”的确切含义是什么?您好@Yannick,这句话不正确:
    也许您已经知道,但是将min.insync.replicas设置为2意味着当您的制作者(acks=all)将为特定主题生成记录时,相应的代理将等待另外两个isr确认写入。
    。相应的“领导者”代理也是同步副本的一部分,因此它将只等待1个其他“追随者”代理复制到其提交日志,然后确认,而不是其他两个isr。是的,你是对的,我确实想到了这一点,但写了一些错误的东西,让我纠正一下