一、開發語言:
1、Java是運行在JVM上的語言。
2、erlang和最近比較火的和go語言一樣是從代碼級別就支持高併發的一種語言,
二、協議:
1.RabbitMQ天生就有很高的併發性能,但是 有RabbitMQ嚴格按照AMQP進行實現,受到了很多限制。
2.kafka的設計目標是高吞吐量,所以kafka自己設計了一套高性能但是不通用的協議,他也是仿照AMQP
( Advanced Message Queuing Protocol 高級消息隊列協議)設計的。
三、事務:
1.在數據庫中,多個操作一起提交,要麼操作全部成功,要麼全部失敗。舉個例子, 在轉賬的時候付款和收款,
就是一個事物的例子,你給一個人轉賬,你轉成功,並且對方正常行收到款項後,這個操作纔算成功,有一方
失敗,那麼這個操作就是失敗的。
2.對應消在息隊列中,就是多條消息一起發送,要麼全部成功,要麼全部失敗。3箇中只有ActiveMQ支持,
這個是因 爲,RabbitMQ和Kafka爲了更高的性能,而放棄了對事物的支持 。
四、集羣:
多臺服務器組成的整體叫做集羣,這個整體對生產者和消費者來說,是透明的。其實對消費系統組成的
集羣添加一臺服務器減少一臺服務器對生產者和消費者都是無感之的。
五、負載均衡:
對消息系統來說負載均衡是大量的生產者和消費者向消息系統發出請求消息,系統必須均衡這些請求使得
每一臺服務器的請求達到平衡,而不是大量的請求,落到某一臺或幾臺,使得這幾臺服務器高負荷或超負
荷工作,嚴重情況下會停止服務或宕機。
六、動態擴容:
動態擴容是很多公司要求的技術之一,不支持動態擴容就意味着停止服務,這對很多公司來說是不可以接受的。
Kafka的動態擴容是通過Zookeeper來實現的。
注:
阿里巴巴的Metal,RocketMQ都有Kafka的影子,他們要麼改造了Kafka或者借鑑了Kafka。
Zookeeper是一種在分佈式系統中被廣泛用來作爲:分佈式狀態管理、分佈式協調管理、分佈式配置管理、和分佈式鎖服務的集羣。kafka增加和減少服務器都會在Zookeeper節點上觸發相應的事件kafka系統會捕獲這些事件,進行新一輪的負載均衡,客戶端也會捕獲這些事件來進行新一輪的處理。