問題
- 為什么Kafka的分區(qū)數(shù)無法太多?
RocketMQ
特點
- topic-queue-broker(master+slave)
- broker的mater和slave都是物理概念,同一個broker name時,master的broker id等于0,slave大于0;所以broker一般都是集群
- 不需要選舉,這也是可以去zk的原因;剩下的topic/queue的路由,是由NameServer集群來做的
- master掛掉后,將會寫到別的master,slave不會切換為master
架構(gòu)組成
- Namesrv
- 存儲所有broker信息,broker/topic/queue的對應(yīng)關(guān)系
- NameSrv之間不通信
- 新增NameSrv怎么辦:重啟broker;在ngnix上面維護(hù),讓broker去那里取就可以了
- Broker
- 啟動后跟所有的NameSrv保持長連接,定時發(fā)送心跳,并注冊topic信息
- 所有topic數(shù)據(jù)寫入一個文件,滿1G后,新開文件;寫完文件后,消息才算可用
- 提供pagecache(內(nèi)核空間)加速讀速率
- Slave只提供消費服務(wù),不提供寫服務(wù)
- 30秒與NameSrv心跳,超2分鐘無心跳,會被NameSrv認(rèn)為失效并調(diào)整對應(yīng)關(guān)系;但NameSrv不會廣播通知
- Producer
- 啟動時跟一臺NameSrv建立長連接,獲取broker列表,然后發(fā)送消息
- 多個生產(chǎn)者實例可共用一個ID,組成該topic的生產(chǎn)者集群
- 30秒向broker發(fā)送心跳,超2分鐘無心跳,會被broker斷開
- broker宕機(jī)時,最遲需要30秒才能感知,期間發(fā)送失敗后,會再重試2次;仍然失敗就換下一個broker
- Consumer
- 啟動時跟一臺NameSrv建立長連接,獲取broker列表,然后直連broker消費消息(pull模型)
- 多個消費者實例可共用一個ID,組成該topic的消費者集群
- 30秒向broker發(fā)送心跳,超2分鐘無心跳,會被broker斷開,并廣播該組消費者實例,觸發(fā)負(fù)載均衡
復(fù)制策略
- 異步復(fù)制,數(shù)據(jù)到達(dá)master即返回成功
- 同步復(fù)制,數(shù)據(jù)復(fù)制給所有slave后,才返回成功
刷盤策略
- 同步刷盤,需要將消息寫入commitlog中,才返回成功
- 異步刷盤,消息進(jìn)入內(nèi)存即返回成功
kafka
特點
- topic-partition-broker(mater+slave)
- broker是物理概念,幾個broker就是幾個物理節(jié)點
- mater和slave是邏輯概念,一個broker可能既是topicA的master,也是topicB的slave
- 先由zk選出KafkaController;再由KafkaController決定每個partition的mater和slave
- 當(dāng)master掛掉后,會有一個slave切換成master
MetaQ
Notify
發(fā)送事務(wù)消息
發(fā)送事務(wù)消息是一個二階段過程,類似于數(shù)據(jù)庫的二階段提交。其中,包括兩個過程:
應(yīng)用發(fā)送Half消息到Notify Server。Notify Server收到Half消息后,不會投遞到訂閱者。
應(yīng)用根據(jù)自身的事務(wù)執(zhí)行情況,對Half消息進(jìn)行Commit、Rollback、NOACTION(當(dāng)前無法判決事務(wù)狀態(tài))。
Commit成功后,Notify Server會把消息投遞到訂閱者;Rollback則會把該消息刪除,不會投遞訂閱者;
NOACTION,當(dāng)前Half消息不處理,NotifyServer會定期(時間間隔不確定)發(fā)送Check到發(fā)送方應(yīng)用上
檢查對應(yīng)的事務(wù)狀態(tài)(默認(rèn)檢查7天,直到Commit或者Rollback,超過7天就當(dāng)作Rollback處理)
注意:notify事務(wù)消息目前是異步提交,有可能出現(xiàn)提交成功并且投遞到下游消費端以后,再次進(jìn)行發(fā)送Check到發(fā)送方。
ActiveMQ
Apache ActiveMQ ? is the most popular and powerful open source messaging and Integration Patterns server.
Apache ActiveMQ is fast, supports many Cross Language Clients and Protocols, comes with easy to use Enterprise
Integration Patterns and many advanced features while fully supporting JMS 1.1 and J2EE 1.4.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。