簡體   English   中英

卡夫卡鏡子制造商的行為

[英]Kafka mirror maker behaviour

假設我們有兩個數據中心DC1和DC2。 我正在使用Kafka mirror maker將kafka數據從DC1鏡像到DC2。 一旦DC1下降,僅DC1處於活動狀態,DC2將變為活動狀態。

據我所知,kafka主題和偏移量主題都將鏡像到DC2。

例如,我在DC1中產生了100 msgs到T1,並且已經將大約80 msgs鏡像到了DC2。 在DC1中,我已經消耗了大約90毫秒。 現在DC1掉線了,我正在從DC2消耗電。 我的消費者請求是獲取第91條消息。 但是只有80消息已被鏡像。 在這種情況下會發生什么? 由於所需的偏移量不可用,因此它是否將與auto.offset.reset值一起使用。

在另一種情況下,假設我從DC1消耗了90 msg,但所有100 msg已被鏡像到DC2。 在這種情況下,如果我開始從DC2消耗能量,將重復10 msgs,對嗎?

成功處理后,如果偏移主題鏡像未完成,將會發生什么?

鏡像制作者不復制偏移量。 源和目標都可以具有不同數量的分區和不同的偏移量。

如果要確保在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 ”設置為“最早”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM