2017-03-08 40 views
1

我正在閱讀這兩個概念。主要是卡夫卡。並與JMS進行比較以更好地理解。JMS vs特定條件下的卡夫卡

卡夫卡保證訂購交貨和多個訂戶。卡夫卡如何實現它?

卡夫卡有多個分區。如果每個分區有一位消費者,那麼我們可以保證訂購。我們可以實現多個分區的負載平衡。所以兩個在同一時間是可能的。

在JMS的情況下,如果我們有多個隊列,是不是與Kafka相同?

Q1:在這種情況下哪個更好?第二季度:我是否在狹隘地尋找?卡夫卡做得比這更多嗎?

請告訴我。

即使我錯了JMS,請讓我知道。

+0

順便說一句,也就是使用在服務器端的Apache卡夫卡和繼續使用JMS客戶端,那麼,客戶端上的選項側。 Confluent爲Kafka提供了諸如JMS客戶端:http://docs.confluent.io/current/clients/kafka-jms-client/docs/index.html –

回答

0

這裏有分歧相當不錯的文章: http://blog.hampisoftware.com/index.php/2016/01/20/apache-kafka-differences-from-jms/

卡夫卡不保證跨越一個話題的多個分區消息排序。訂單僅在分區內維護。爲了實現嚴格的排序,您需要爲每個主題使用一個分區。

+0

這不完全正確。您可以保證跨多個分區進行排序,您只需爲所需的所有消息設置SAME KEY即可。這些消息將轉到同一個分區,所以如果您需要在所有消息中進行排序,那麼您最終只會使用一個分區。但在大多數情況下,主題的消息來自不同的來源,您只需要根據來源進行排序。在這些情況下,您可以擁有多個分區並使用消息KEY,您將在需要的消息中維護順序,但由於分區而實現並行處理。 –

1

我問我自己:)

當你寫之前同樣的問題,卡夫卡保證只在一個分區有序傳遞。期。如果使用多個分區(必須具有並行性),那麼偵聽多個分區的使用者有可能在分區2的消息B之前從分區1獲取消息A,即使消息B先到達。

現在,關於卡夫卡和JMS之間的區別。在JMS中,你有一個隊列,你有一個主題。在隊列中,當第一個消費者消費一條消息時,其他消費者不能再接受它了。通過話題,多個消費者可以收到每條消息,但難以擴展。來自Kafka的消費者羣體是這兩個概念的概括 - 它允許在同一個消費羣體的成員之間進行擴展,但它也允許在許多不同的消費羣體之間廣播相同的消息。

更重要的區別在於以下幾點。想象一下,你擁有500個分區的卡夫卡主題,另一方面500個JMS消息隊列。讓我們也想象一下,你有一定數量的生產者和消費者。在JMS的情況下,您需要配置每個人,以便他們知道哪些隊列屬於他們。如果例如一些消費者崩潰或者你發現你需要增加消費者的數量?您必須手動重新配置整個系統。這是免費的卡夫卡,即卡夫卡提供自動重新平衡這是一個非常有用的功能。最後,Kafka速度非常快,主要是因爲一些聰明的磁盤/內存傳輸技術,並且因爲消費者關心他們消費的消息,而不是像JMS中的代理。因此,消費者也能夠「倒帶」,即重新讀取來自例如用戶的消息。 2天前。

參見:

+0

你的回答對我來說很清楚。 –