[英]Running Kafka cost-effectively at the expense of lower resilience
假設我有一個便宜但不太可靠的數據中心 A,以及一個昂貴但更可靠的數據中心 B。我想以最具成本效益的方式運行 Kafka,即使這意味着冒着數據丟失和/或停機的風險。 我可以在任一數據中心運行任意數量的代理,但請記住,成本需要盡可能低。
對於這種情況,假設如果代理不運行則不會產生任何費用。 還假設生產者/消費者完全可靠地運行而不用擔心他們的成本。
我有兩個想法如下:
選項 1 會更便宜,但需要生產者/消費者更加復雜。 選項 2 會更昂貴,但對生產者/消費者的復雜性要求較低。
選項 2 甚至可能嗎? 如果 A 中出現中斷,是否有任何方法可以讓 B 中的代理上線,被選為主題的領導者並讓生產者/消費者無縫地開始向他們發送消息? 同樣,數據丟失是正常的,切換停機時間也是正常的。 但是無論選擇什么,都不需要人工干預。
我可以考慮其他方法嗎?
兩者都不可行。
主題及其記錄對於每個集群都是唯一的。 集群中的任何 Kafka 分區只能存在一個領導分區。
有了這兩條信息,示例場景包括:
bootstrap.servers
的數據。另一件要記住的事情是,主題創建/更新/刪除事件不會自動跨集群同步,因此 Kafka Streams 應用程序,尤其是,將無法使用這種方法維護 state。
您可以使用 MirrorMaker 或 Confluent Replicator / Cluster Linking 等工具來幫助完成所有這些,但我個人從未見過客戶端故障轉移部分處理得很好,尤其是當記錄順序和冪等處理很重要時
最終,這就是可用性區域的用途。 據我了解,雲提供商一次丟失多個可用區的可能性非常小。 因此,您需要跨 3 個或更多可用性區域設置一個 Kafka 集群,並為 Kafka 配置“機架感知”以說明其安裝位置。
如果您想在不運行時保持目標/被動集群關閉然后啟動集群,如果您不需要任何歷史記錄並且不關心源集群中的消費者滯后差距.. obv 使用視情況而定。
MM2 或任何類型的異步定向復制要求集群始終處於活動狀態。
Stretch cluster 並不是真正可行的 2 dc 事物的 b/c,無論是 raft 還是 zk,你都需要第三個 dc,這可能是你最昂貴的選擇。
Redpanda 具有將所有日志段卸載到 s3 的能力,然后對它們進行索引以允許它們用於其他集群,因此如果您不斷地將日志段的一個副本寫入具有 s3 接口的備用 DC 存儲陣列,則可能是可口的。 然后,無論何時需要,您只需在目標 dc 中按需啟動一個集群並將其指向 object 商店,您就可以立即開始生產並與您的新客戶一起消費。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.