kafka-producer如何發送消息

producer如何發送消息

首先producer保持着一個與zk的鏈接,通過這個鏈接,可以獲得當前Topic所有的partition leader所在主機的列表,然後,會選擇一臺主機,直接發送消息到broker上的leader partition,不需要經過任何中介或其他路由轉發。爲了實現這個特性,kafka集羣中的每個broker都可以響應producer的請求,並返回topic的一些元信息,這些元信息包括哪些機器是存活的,topic的leader partition都在哪,現階段哪些leader partition是可以直接被訪問的。

producer的負載均衡
這也就意味着,消息生產的負載均衡由Producer客戶端自己控制。實現的方式可以是隨機分配、實現一類隨機負載均衡算法,或者指定一些分區算法。Kafka提供了接口供用戶實現自定義的partition,用戶可以爲每個消息指定一個partitionKey,通過這個key來實現一些hash分區算法。比如,把userid作爲partitionkey的話,相同userid的消息將會被推送到同一個partition。

acks設置
producers可以異步的並行的向kafka發送消息,但是通常producer在發送完消息之後會得到一個future響應,返回的是offset值或者發送過程中遇到的錯誤。這其中有個非常重要的參數“acks”,這個參數決定了producer要求leader partition 收到確認的副本個數,如果acks設置數量爲0,表示producer不會等待broker的響應,所以,producer無法知道消息是否發送成功,這樣有可能會導致數據丟失,但同時,acks值爲0會得到最大的系統吞吐量。
當ack=1,表示producer寫partition leader成功後,broker就返回成功,無論其他的partition follower是否寫成功。當ack=2,表示producer寫partition leader和其他一個follower成功的時候,broker就返回成功,無論其他的partition follower是否寫成功。當ack=-1[parition的數量]的時候,表示只有producer全部寫成功的時候,纔算成功,kafka broker才返回成功信息。這裏需要注意的是,如果ack=1的時候,一旦有個broker宕機導致partition的follower和leader切換,會導致丟數據。

若acks設置爲1,表示producer會在leader partition收到消息時得到broker的一個確認,這樣會有更好的可靠性,因爲客戶端會等待直到broker確認收到消息。若設置爲-1,producer會在所有備份的partition收到消息時得到broker的確認,這個設置可以得到最高的可靠性保證。

Kafka 消息有一個定長的header和變長的字節數組組成。因爲kafka消息支持字節數組,也就使得kafka可以支持任何用戶自定義的序列號格式或者其它已有的格式如Apache Avro、protobuf等。Kafka沒有限定單個消息的大小,但我們推薦消息大小不要超過1MB,通常一般消息大小都在1~10kB之前。

發佈消息時,kafka client先構造一條消息,將消息加入到消息集set中(kafka支持批量發佈,可以往消息集合中添加多條消息,一次行發佈),send消息時,producer client需指定消息所屬的topic。

批量發送
如果採用批量發送,Producer 將消息發送到broker,是一批一批的發送的,也就是說,調用send消息後,其實消息還在生產者的buffer中,然後多條消息一起推送到broker上,這樣可以減少網絡請求和磁盤IO,具體的參數有生產者自己配置。以批量發送的方式推送數據可以極大的提高處理效率,但是同時也會帶來隱患,顯而易見的是,假如有一批數據,在緩存中,還沒發出去,會造成消息的丟失。
Batch的數量大小可以通過Producer的參數控制,參數值可以設置爲累計的消息的數量(如500條)、累計的時間間隔(如100ms)或者累計的數據大小(64KB)。當然具體參數設置需要在效率和時效性方面做一個權衡。

壓縮
Kafka支持以集合(batch)爲單位發送消息,在此基礎上,Kafka還支持對消息集合進行壓縮,Producer端可以通過GZIP或Snappy格式對消息集合進行壓縮。Producer端進行壓縮之後,在Consumer端需進行解壓。壓縮的好處就是減少傳輸的數據量,減輕對網絡傳輸的壓力,在對大數據處理上,瓶頸往往體現在網絡上而不是CPU。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章