1.1.1 什么是消息中間件
消息中間件利用高效可靠的消息傳遞機制進行平台無關的數據交流,並基於數據通信來進行分布式系統的集成。通過提供消息傳遞和消息排隊模型,它可以在分布式環境下擴展進程間的通信。對於消息中間件,常見的角色大致也就有Producer(生產者)、Consumer(消費者)
常見的消息中間件產品:
(1)ActiveMQ
ActiveMQ是Apache出品的,最流行的能力,能力強勁的開源消息總線,並且他完全支持Java的JMs規范。豐富的API,多種集群構建模式使得它成為業界老牌的消息中間件,在中小型企業應用廣泛。但是相比於kafka,rabbitmq等MQ來說,性能太弱,在如今的高並發,大數據處理的場景下顯得力不從心,經常會出現一些小問題,消息延遲,堆積,堵塞等,不過其多種集群架構是優勢。
(2)RabbitMQ
RabbitMQ是使用erlang語言開發的開源消息隊列系統,基於AMQP協議來實現。AMQP的主要特征是面向消息/隊列/路由(包括點對點的發布/訂閱)可靠性,安全。AMQP協議更多用在企業系統內,對數據一致性/穩定性和可靠性要求很高的場景,對性能和吞吐量的要求還在其次。rabbitMQ的可靠性很高,性能比不上kafka,但是也很高了,集群模式也有多種。
(3)Kafka
kafka是linkedin開源的分布式發布-訂閱消息系統,目前歸屬於Apache的頂級項目。主要特點是基於pull模式來處理消息消費,追求高吞吐量,在一台普通的服務器上既可以達到10W/s的吞吐速率;完全的分布式系統。一開始的目的是日志的收集和傳輸。0.8版本開始支持復制,不支持事務,對消息的丟失,重復,錯誤沒有嚴格要求 適用於產生大量數據的互聯網服務的數據收集業務。在廉價的服務器上都能有很高的性能,這個主要是基於操作系統底層的pagecache,不用內存勝似使用內存。
(4)RocketMQ
RocketMQ是阿里開源的,目前是也是Apache的頂級項目,純Java開發,具有高吞吐量,高可用,適合大規模分布式系統應用的特點。其思路起源於kafka,它對消息的可靠傳輸以及事務性做了優化,目前在阿里被廣泛應用於交易/充值/流計算/消息推送/日志流式處理/Binglog分發等場景。不過其維護是一個痛點。不過它能保證消息的順序性,集群模式也豐富,在雙十一等高並發場景承受上億訪問,三大指標都很好,但是它的商業版要收費!!!
(5)ZeroMQ
是支持fanout、topic這些功能的高級socket,不再是傳統socket的點到點通信了
只是一個網絡編程的Pattern庫,將常見的網絡請求形式模式化、組件化。ZeroMQ能實現RabbitMQ不擅長的高級復雜隊列,但開發人員需要自己組合多種技術框架,技術復雜度是一個挑戰。僅提供非持久性的隊列,如果Down機,數據將丟失。
特點 速度快
Kafka 下載地址http://kafka.apache.org/downloads
注意:解壓文件到沒有空格,漢字和特殊字符的目錄下
進入config 目錄 修改server.properties配置
安裝目錄進入cmd 啟動zookeeper(新版本kafka已經集成了zookeeper)
輸入命令 bin\windows\zookeeper-server-start.bat config\zookeeper.properties
啟動成功不要關閉
啟動kafka
另開一個窗口輸入 bin\windows\kafka-server-start.bat config\server.properties
Kafka啟動成功
測試
1、 創建主題,進入Kafka安裝目錄D:\kafka_2.12-2.1.0,按下Shift+右鍵,選擇“打開命令窗口”選項,打開命令行,輸入:
.\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
不要關了這個窗口
查看主題輸入:
.\bin\windows\kafka-topics.bat --list --zookeeper localhost:2181
2、 創建生產者,進入Kafka安裝目錄D:\kafka_2.12-2.1.0,按下Shift+右鍵,選擇“打開命令窗口”選項,打開命令行,輸入:
.\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic test
3創建消費者 進入Kafka安裝目錄D:\kafka_2.12-2.1.0,按下Shift+右鍵,選擇“打開命令窗口”選項,打開命令行,輸入:
.\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning
生產者發送消息
接受者收到消息