kafka是個日志處理緩沖組件,在大數據信息處理中使用。和傳統的消息隊列相比較簡化了隊列結構和功能,以流形式處理存儲(持久化)消息(主要是日志)。日志數據量巨大,處理組件一般會處理不過來,所以作為緩沖層的kafka,支持巨大吞吐量。為了防止信息丟失,其消息被調用后不直接丟棄,要多存儲一段時間,等過期時間過了才丟棄。這是mq和redis不能具備的。主要特點如下:巨型存儲量: 支持TB甚至PB級別數據。高吞吐,高IO:一般配置的服務器能實現單機每秒100K以上消息的傳輸。消息分區,分布式消費:能保消息順序傳輸。 支持離線數據處理和實時數據處理。Scale out:支持在線水平擴展,以支持更大數據處理量
redis只是提供一個高性能的、原子操作內存鍵值對,具有高速訪問能力,可用做消息隊列的存儲,但是不具備消息隊列的任何功能和邏輯,要作為消息隊列來實現的話,功能和邏輯要通過上層應用自己實現。
我們以RabbitMQ為例介紹。它是用Erlang語言開發的開源的消息隊列,支持多種協議,包括AMQP,XMPP, SMTP, STOMP。適合于企業級的開發。
MQ支持Broker構架,消息發送給客戶端時需要在中心隊列排隊。對路由,負載均衡或者數據持久化都有很好的支持。
還有ActiveMq,ZeroMq等。功能基本上大同小異。并發吞吐TPS比較,ZeroMq 最好,RabbitMq 次之, ActiveMq 最差。
原文:
前言
上篇文章簡單介紹canal概念,本文結合常見的緩存業務去講解canal使用。在實際開發過程中,通常都會把數據往redis緩存中保存一份,做下簡單的查詢優化。如果這時候數據庫數據發生變更操作,就不得不在業務代碼中寫一段同步更新redis的代碼,但是這種 數據同步的代碼和業務代碼糅合在一起 看起來不是很優雅,而且還會出現數據不一致問題。那能不能把這部分同步代碼從中抽離出來,形成獨立模塊呢?答案是肯定的,下面通過canal結合Kafka來實現mysql與redis之間的數據同步。
架構設計
通過上述結構設計圖可以很清晰的知道用到的組件:MySQL、Canal、Kafka、ZooKeeper、Redis。
Kafka&Zookeeper搭建
首先在 官網 下載Kafka:
下載后解壓文件夾,可以看到以下幾個文件:
Kafka內部自帶了zookeeper,所以暫不需要去下載搭建zookeeper集群,本文就使用Kafka自帶zookeeper來實現。
通過上述zookeeper啟動命令以及Kafka啟動命令把服務啟動,可以通過以下簡單實現下是否成功:
Canal搭建
canal搭建具體可以參考上文,這里只講解具體的參數配置:
找到/買粉絲nf目錄下的canal.properties配置文件:
然后配置instance,找到/買粉絲nf/example/instance.properties配置文件:
經過上述配置后,就可以啟動canal了。
測試
環境搭建完成后,就可以編寫代碼進行測試。
1、引入pom依賴
2、封裝Redis工具類
在application.yml文件增加以下配置:
封裝一個操作Redis的工具類:
3、創建MQ消費者進行同步
創建一個CanalBean對象進行接收:
最后就可以創建一個消費者CanalConsumer進行消費:
測試Mysql與Redis同步
mysql對應的表結構如下:
啟動項目后,新增一條數據:
可以在控制臺看到以下輸出:
如果更新呢?試一下Update語句:
同樣可以在控制臺看到以下輸出:
經過測試完全么有問題。
總結
既然canal這么強大,難道就沒缺點嘛?答案當然是存在的啦,比如:canal只能同步增量數據、不是實時同步而是準實時同步、MQ順序問題等; 盡管有一些缺點,畢竟沒有一樣技術或者產品是完美的,最重要是合適。比如公司目前有個視圖服務提供寬表搜索查詢功能就是通過 同步Mysql數據到Es采用Canal+Kafka的方式來實現的。
大數據技術是指大數據的應用技術,涵蓋各類大數據平臺、大數據指數體系等大數據應用技術。
大數據是指無法在一定時間范圍內用常規軟件工具進行捕捉、管理和處理的數據集合。是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力的海量、高增長率和多樣化的信息資產。
隨著云時代的來臨,大數據也吸引了越來越多的關注。分析師團隊認為,大數據通常用來形容一個公司創造的大量非結構化數據和半結構化數據,這些數據在下載到關系型數據庫用于分析時會花費過多時間和金錢。
大數據分析常和云計算聯系到一起,因為實時的大型數據集分析需要像MapRece一樣的框架來向數十、數百或甚至數千的電腦分配工作。
擴展資料:
大數據的三個層面:
簡單來講是學習Java、數據結構、關系型數據庫、linux系統操作、hadoop離線分析、Storm實時計算、spark內存計算以及實操課程
復雜的話,就是每個大的知識點里都包含著很多小的知識點,這可以參考(青牛的課程)
2024-07-20 22:00
2024-07-20 21:40
2024-07-20 21:32
2024-07-20 20:46
2024-07-20 20:37
2024-07-20 20:20