【问题标题】:Does Kafka producer write keyless message to another partition when a partition is down?当分区关闭时,Kafka 生产者是否将无密钥消息写入另一个分区?
【发布时间】:2021-01-30 16:01:32
【问题描述】:

例如,我有一个具有 2 个分区的主题,并且一个使用 defaultpartitioner(我假设为循环)的生产者写入该主题。在某些时候,分区 1 变得不可用,因为所有副本代理都离线了。假设消息没有指定键,生产者会重新发送消息到分区 2 吗?还是只是卡住了?

【问题讨论】:

    标签: apache-kafka kafka-producer-api


    【解决方案1】:

    这是一个有趣的问题,我们应该从更广泛(集群)的角度来看待它。

    在某些时候,分区 1 变得不可用,因为所有副本代理都离线了。

    我看到以下场景:

    1. 分区 1 的所有副本代理都与分区 2 的副本代理不同。
    2. 分区 1 的所有副本代理都与分区 2 相同。
    3. 一些副本代理与分区 2 相同。

    在场景“1”中,这意味着您仍然有足够的代理处于活动状态,因为复制因子是主题范围的,而不是基于分区的配置。在这种情况下,一旦第一个代理出现故障,其数据就会被移动到另一个代理,以确保您的分区始终有足够的同步副本。

    在场景“2”中,两个分区都不可用,您的 KafkaProducer 最终会超时。现在,这取决于您是否有其他活跃的代理可以接收分区的数据。

    在场景“3”中,死副本将转移到正在运行的代理。在此期间,KafkaProducer 只会写入分区 2,因为这是主题中唯一可用的分区。一旦分区 1 有足够的同步副本,生产者将再次开始为两个分区生产。

    实际上,我可以想到更多的场景。如果您需要更具体的答案,您需要指定

    • 您有多少经纪人,
    • 您的复制因子实际上是什么以及
    • 哪个经纪人倒闭的时间顺序。

    假设消息没有指定key,生产者会重新发送消息到分区2吗?

    KafkaProducer 不会将之前发送到分区 1 的数据重新发送到分区 2。写入分区 1 的任何内容都将保留在分区 1 中。

    【讨论】:

      猜你喜欢
      • 2019-11-10
      • 2020-08-24
      • 2017-04-28
      • 2018-08-07
      • 2018-02-05
      • 2020-01-12
      • 2017-09-23
      • 2021-10-04
      • 1970-01-01
      相关资源
      最近更新 更多