柚子快報邀請碼778899分享:golang整合kafka
柚子快報邀請碼778899分享:golang整合kafka
kafka 基本概念
消息隊列
1、什么是消息隊列
消息(Message)是指在應(yīng)用之間傳送的數(shù)據(jù),消息可以非常簡單,比如只包含文本字符串,也可以更復(fù)雜,可能包含嵌入對象。 消息隊列(Message Queue)是一種應(yīng)用間的通信方式,消息發(fā)送后可以立即返回,有消息系統(tǒng)來確保信息的可靠專遞,消息發(fā)布者只管把消息發(fā)布到MQ中而不管誰來取,消息使用者只管從MQ中取消息而不管誰發(fā)布的,這樣發(fā)布者和使用者都不用知道對方的存在。
2、消息隊列的應(yīng)用場景
應(yīng)用耦合:多應(yīng)用間通過消息隊列對同一消息進行處理,避免調(diào)用接口失敗導(dǎo)致整個過程失??;
異步處理:多應(yīng)用對消息隊列中同一消息進行處理,應(yīng)用間并發(fā)處理消息,相比串行處理,減少處理時間;
限流削峰:廣泛應(yīng)用于秒殺或搶購活動中,避免流量過大導(dǎo)致應(yīng)用系統(tǒng)掛掉的情況;
消息驅(qū)動的系統(tǒng):系統(tǒng)分為消息隊列、消息生產(chǎn)者、消息消費者,生產(chǎn)者負責(zé)產(chǎn)生消息,消費者(可能有多個)負責(zé)對消息進行處理;
3、消息隊列的兩種模式
消息隊列包括兩種模式,點對點模式(point to point, queue)和發(fā)布/訂閱模式(publish/subscribe,topic)
點對點:點對點模式下包括三個角色:消息隊列、生產(chǎn)者、消費者
消息發(fā)送者生產(chǎn)消息發(fā)送到queue中,然后消息接收者從queue中取出并且消費消息。消息被消費以后,queue中不再有存儲,所以消息接收者不可能消費到已經(jīng)被消費的消息。
3.1、點對點模式特點:
每個消息只有一個接收者(Consumer)(即一旦被消費,消息就不再在消息隊列中);
發(fā)送者和接發(fā)收者間沒有依賴性,發(fā)送者發(fā)送消息之后,不管有沒有接收者在運行,都不會影響到發(fā)送者下次發(fā)送消息;
接收者在成功接收消息之后需向隊列應(yīng)答成功,以便消息隊列刪除當前接收的消息;
3.2、發(fā)布訂閱模式
每個消息可以有多個訂閱者;
發(fā)布者和訂閱者之間有時間上的依賴性。針對某個主題(Topic)的訂閱者,它必須創(chuàng)建一個訂閱者之后,才能消費發(fā)布者的消息。
為了消費消息,訂閱者需要提前訂閱該角色主題,并保持在線運行;
kafka是什么?
Kafka 是一個分布式,分區(qū)的,多副本的,多訂閱者的消息發(fā)布訂閱系統(tǒng),由 LinkedIn 公司開發(fā)。以下是 Kafka 的一些相關(guān)知識:
1、優(yōu)點
可靠性強(分布式-分區(qū)-副本)、擴展性強(可伸縮)、性能高(數(shù)據(jù)讀寫)、耐用性強(數(shù)據(jù)持久化)、時效性強。
2、缺點
由于是批量發(fā)送,數(shù)據(jù)并非真正的實時; 僅支持統(tǒng)一分區(qū)內(nèi)消息有序,無法實現(xiàn)全局消息有序; 有可能消息重復(fù)消費; 依賴zookeeper進行元數(shù)據(jù)管理。
kafka重要概念
Topic:Kafka 中的消息被組織成主題(topic),生產(chǎn)者將消息發(fā)布到特定的主題,消費者從感興趣的主題訂閱消息。 Partition:每個主題(topic)可以被分成多個分區(qū)(partition),每個分區(qū)是一個有序的消息隊列,生產(chǎn)者將消息發(fā)送到某個特定的分區(qū),每個分區(qū)可以分布在不同的服務(wù)器上以實現(xiàn)負載均衡、容錯等目的。 Broker:Kafka 集群中的每個節(jié)點稱為 broker,每個 broker 可以承載多個分區(qū)(partition),每個分區(qū)(partition)可能被分配到不同的 broker 上。 Producer:消息的生產(chǎn)者,可以將消息發(fā)布到特定主題(topic)的某個分區(qū)(partition)。 Consumer:消息的消費者,可以從某個主題(topic)的某個分區(qū)(partition)訂閱消息。 Consumer Group:若干個消費者可以組成一個消費者組(consumer group),共同消費某個主題(topic)的所有消息。每個分區(qū)(partition)只能由同一個 consumer group 中的一個消費者消費。 Offset:Kafka 中的每條消息都有一個唯一的偏移量(offset),代表該消息在分區(qū)(partition)中的位置。每個消費者都有自己的 offset 計數(shù)器,可以指定從哪個 offset 開始讀取消息。 Replication:Kafka 支持數(shù)據(jù)備份和容錯機制,每個分區(qū)(partition)可以有多個副本(replica),這些副本分布在不同的 broker 上,以保證某一個 broker 宕機時數(shù)據(jù)不會丟失。
副本
在kafka 中, 副本和正本都被稱之為副本,但存在leader 和follower之分,活躍的稱之為leader,其它的為follower, topic、partition、replica的關(guān)系:消息進來的時候首先存入leader replica,然后從leader replica中復(fù)制到其它的follower replica, 只有當復(fù)制全部完成的時候,consumer才可以消費此條消息,這樣的措施的目的是為了意外發(fā)生的時候,數(shù)據(jù)可以恢復(fù),consumer的消費也是從leader replica中獲取的。
概念要點補充
一個partition只能被同組的一個consumer消費同一個組里的一個consumer可以消費多個partition消費效率最高的情況是partition和consumer 的數(shù)量相同,這樣可以確保每個consumer可以專職負責(zé)一個partitionconsumerd的數(shù)量不能多余partition的數(shù)量,當consumer的數(shù)量大于partition時,就會有consumer閑置consumer可以認為是一個訂閱者的集群,其中的每個consumer負責(zé)自己所消費的分區(qū)
參考資料
1、https://www.cnblogs.com/itlz/p/15470456.html
柚子快報邀請碼778899分享:golang整合kafka
參考閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。