微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

分区关闭时,Kafka生产者是否将无密钥消息写入另一个分区?

如何解决分区关闭时,Kafka生产者是否将无密钥消息写入另一个分区?

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

解决方法

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

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

我看到以下情况:

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

在方案“ 1”中,这意味着您仍然有足够的代理处于活动状态,因为复制因子是主题范围而不是基于分区的配置。在这种情况下,第一个代理关闭后,其数据将立即移至另一个代理,以确保您的分区始终具有足够的同步副本。

在方案“ 2”中,两个分区都不可用,并且您的KafkaProducer最终将超时。现在,这取决于您是否还有其他活着的代理,并且可以接受分区的数据。

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

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

  • 您有多少经纪人
  • 您的复制因子实际上是什么,
  • 哪个经纪人及时下订单。

假设消息没有指定的密钥,生产者是否将消息重新发送到分区2?

KafkaProducer不会将先前发送到分区1的数据重新发送到分区2。无论写入分区1的内容如何,​​都将保留在分区1中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。