我們正在嘗試使用通過kafka進行異步通信的微服務來構建平臺。 按照我的理解,看起來很自然,每個微服務中的每個聚合類型有1個主題。因此,實施用戶註冊的微服務會將用戶相關事件發佈到「用戶」主題中。其他微服務將監聽從「用戶」微服務創建的事件,並實現其自己的邏輯並相應地填充其DB。問題是其他微服務可能不會對用戶微服務產生的所有事件感興趣,而是對這些事件的一部分產生興趣,例如UserCreated(沒有UsernameChanged ...)。 使用RabbitMq很簡單,因爲事件處理程序是根據消息類型調用的。kafka中的消息路由
- 您是否曾經通過kafka實現基於消息的路由/過濾?
- 我們是否應該消費所有消息,反序列化它們並忽略消費者不需要的消息? (聽起來像是一個開銷)
- 我們應該轉發這些主題以將這些消息轉向風暴並將這些消息重定向到針對消費者的主題? (聽起來像一個矯枉過正的和未調整的)
- 使用分區似乎不符合邏輯,因爲一個路由機制
1 - 在使用卡夫卡的一年中從未像現在這樣。 2 - 很多,是的,除非你有更多的粒度或目標主題。好消息是,如果你的客戶端功能齊全,支持快速支持,那麼從卡夫卡消費便宜3 - 只有你可以回答。駱駝可以完成更輕的路由。 4 - 這根本不是分區的目的。當你有大量的數據快速提供時,Kafka是一個非常強大的工具,這是以更微妙的控制如何分配爲代價的。你不會用噴水器給花園澆水。 –
不僅卡夫卡消費便宜,而且從生產方面來看,讀取整個流和扔你想要的東西實際上相當便宜。線性讀取與隨機讀取相比,磁盤驅動器的速度要快100到1000倍。這是Kafka設計理念的重要組成部分:https://kafka.apache.org/08/design.html –