簡體   English   中英

與RabbitMq類似,Apache Kafka能否擁有強大的路由功能?

[英]Can we have strong routing capability with Apache Kafka similar to RabbitMq?

我們正在嘗試評估Kafka並在我們的軟件中替換Rabbit Mq。

我們知道Kafka在RabbitMq方面優於離線消費,巨大的持久性,卓越的性能,低延遲和高吞吐量。

但我們需要像RabbitMq一樣的功能,使用主題交換粒度路由進行異構消費。

在某種程度上,我們可以通過在Kafka中為每個代理提供更多的分區來實現這一目標。 但它有自己的局限性,例如znode上主題元數據的開銷,增加延遲。

我們的用例是過濾分區內的數據。 假設您在一個分區中獲得了100個類似類型的傳感器數據。 消費者是否有能力僅選擇少量傳感器數據而忽略其余數據。

我們可以在應用程序(消費者)方面進行過濾/路由,但它似乎不是可重用的,並且在每個消費者方面都有額外的開銷。

Kafka有沒有辦法通過最佳分區數提供豐富的路由功能?

謝謝,Ashish

Kafka的消息模型比RabbitMQ模型簡單得多,用戶明智地使用它提供的少量抽象。 實際上,主題是在Kafka中應該完成的唯一路由級別。 分區僅用於擴展,提供順序(但僅限於分區內,如果您具有依賴於訂單的應用程序,這是可擴展性的顯着問題),並促進主題中的並發使用者。

在分區級別進行路由的問題在於它不可伸縮,因為分區是提供可伸縮性的Kafka的元素(至少在消息傳遞層)。 顯然,Kafka不是為粒度路由而設計的。 它專為持久,可靠,可擴展的發布/訂閱消息傳遞而設計。 分區也不是為了在整個集群中擴展而設計的。 就其本質而言,分區是一個或幾個Kafka節點的本地(取決於主題的復制因子),但Kafka在群集中的主題內分布多個分區。 這意味着如果消息支持某個特定分區而不是在主題中的分區之間均勻分布,則存在一些熱點定位的可能性(這就是Kafka生產者通常為您處理分區的原因)。

在客戶端的過濾方面,我認為你是對的:對我來說感覺就像浪費了很多資源,但也許我只是不喜歡浪費資源。

簡而言之,如果你試圖用如此復雜的術語來思考Kafka的消息傳遞抽象,我認為你可能會冒險陷入困境。 Kafka非常適合並通過分區進行優化以分配負載,因此將它們用於不同的 - 即使是模糊相似的 - 用例肯定不是理想的。

我有一種感覺,你可以在Kafka的功能環境中管理你的用例。 我發現Kafka主題框架中復雜路由方案面臨的最大挑戰是阻止多個主題中的重復數據,但是一旦了解了多個應用程序如何在同一主題中的不同位置消耗,問題似乎就會消失。 從這個意義上講,將Kafka更多地視為日志而不是隊列是很重要的。

另外,我認為您對管理分區所需的znodes的關注是沒有根據的。 如果你有足夠的主題和分區來消耗ZooKeeper節點的內存(一噸)那么你可能已經遇到了更大的資源問題。

暫無
暫無

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

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