卡夫卡镜制造商的行为

问题描述 投票:0回答:1

比方说,我们有两个数据中心DC1和DC2。我从DC1镜像卡夫卡数据使用卡夫卡镜制造商到DC2。只有DC1是活动的,一旦DC1下降DC2将被激活。

按我的知识,无论是卡夫卡的话题和偏移主题将被镜像到DC2。

例如,我已经产生100封邮件到T1中DC1和大约80的MSG已经镜像到DC2。在DC1,我身边有90封邮件消耗。现在,DC1出现故障,我从DC2消耗。我的消费请求将获取91消息。但是,只有80封邮件已经镜像。将在此情况下,会发生什么?由于所需的偏移量是不可用的,这是否会与auto.offset.reset的价值表现。

在另一种情况下,说我使用了90级的消息从DC1,但所有100条消息已经被镜像到DC2。在这种情况下,如果我开始从DC2消耗,10封邮件将被复制吗?

会发生什么,如果偏移话题镜像未成功处理后完成?

apache-kafka
1个回答
2
投票

镜子制造商不复制偏移。源和目标可以具有不同数目的分区和不同的偏移量的。

如果你想确保恰好一次交货DC2及数据丢失,你需要有生产者和consumer.properties正确配置。

有有效的情况下,当消费者从源消耗一些记录,但是生产者无法写入目的地。在这种情况下,如果“enable.auto.commit”设置为true,它会定期提交即使未写入目的地时的偏移量。因此,为了避免这种情况,应该设置为false。

确保了无数据丢失:

在consumer.properties:enable.auto.commit=false设置

在生产中,添加以下属性:

max.in.flight.requests.per.connection=1
retries=Int.MaxValue
acks=-1
block.on.buffer.full=true

对于mirrorMaker,设置--abortOnSendFail

下面是镜制造商的一些最佳做法。

https://community.hortonworks.com/articles/79891/kafka-mirror-maker-best-practices.html

在关于目标集群上运行的客户,他们不在乎多少记录是从源群集消耗。他们有自己的consumer_offsets。因此,在第一次运行时,它从0开始偏移,然后下一次运行会从最后一个读抵消你消耗。

如果你想从偏移0阅读,你总是可以设置“auto.offset.reset”为“最早”

© www.soinside.com 2019 - 2024. All rights reserved.