2019大廠面試真題之消息中間件—kafka

kafka:
1.消息分類按不同類別,分成不同的Topic,Topic⼜拆分成多個
partition,每個partition均衡分散到不同的服務器(提⾼併發訪問的能⼒)
2.消費者按順序從partition中讀取,不⽀持隨機讀取數據,但可通過改變保
存到zookeeper中的offset位置實現從任意位置開始讀取
3.服務器消息定時清除(不管有沒有消費)
4.每個partition還可以設置備份到其他服務器上的個數以保證數據的可⽤
性。通過Leader,Follower⽅式
5.zookeeper保存kafka服務器和客戶端的所有狀態信息.
(確保實際的客戶端和服務器輕量級)
6.在kafka中,⼀個partition中的消息只會被group中的⼀個consumer消
費;每個group中consumer消息消費互相獨⽴;我們可以認爲⼀個group是⼀ 個"訂閱"者,⼀個Topic中的每個partions,只會被⼀個"訂閱者"中的⼀個consumer消費,不過⼀個consumer可以消費多個partitions中的消息
7.如果所有的consumer都具有相同的group,這種情況和queue模式很像;
消息將會在consumers之間負載均衡。
8.如果所有的consumer都具有不同的group,那這就是"發佈-訂閱";消息將
會⼴播給所有的消費者。
9.持久性,當收到的消息時先buffer起來,等到了⼀定的閥值再寫⼊磁盤⽂件,減少磁盤IO.在⼀定程度上依賴OS的⽂件系統(對⽂件系統本身優化⼏乎不可能)
10.除了磁盤IO,還應考慮⽹絡IO,批量對消息發送和接收,並對消息進⾏壓
縮。
11.在JMS實現中,Topic模型基於push⽅式,即broker將消息推送給
consumer端。
不過在kafka中,採⽤了pull⽅式,即consumer在和broker建⽴連接之後,主動去pull(或者說fetch)消息;這種模式有些優點,⾸先consumer端可以根據⾃⼰的消費能⼒適時的去fetch消息並處理,且可以控制消息消費的進度(offset);此外,消費者可以良好的控制消息消費的數量,batch fetch.
12.kafka⽆需記錄消息是否接收成功,是否要重新發送等,所以kafka的
producer是⾮常輕量級的,consumer端也只需要將fetch後的offset位置註冊到zookeeper,所以也是⾮常輕量級的。
–kafka使⽤場景對於⼀些常規的消息系統,kafka是個不錯的選擇;partitons/replication和容錯,可以使kafka具有良好的擴展性和性能優
勢。
不過到⽬前爲⽌,我們應該很清楚認識到,kafka並沒有提供JMS中的"事務性""
消息傳輸擔保(消息確認機制)"“消息分組"等企業級特性;
kafka只能使⽤作爲"常規"的消息系統,在⼀定程度上,尚未確保消息的發送與接收絕對可靠(⽐如,消息重發,消息發送丟失等) kafka的特性決定它⾮常適合作爲
“⽇志收集中⼼”;application可以將操作⽇志"批量”"異步"的發送到kafka集羣中, ⽽不是保存在本地或者DB中;kafka可以批量提交消息/壓縮消息等,這對
producer端⽽⾔,⼏乎感覺不到性能的開⽀。
consumer端採⽤批量fetch⽅式,此時consumer端也可以使hadoop等其他
系統化的存儲和分析系統
kafka和RabbitMQ區別:
1、RabbitMQ,遵循AMQP協議,由內在⾼併發的erlanng語⾔開發,⽤在實
時的對可靠性要求⽐較⾼的消息傳遞上(有消息確認機制)。
2、kafka是Linkedin於2010年12⽉份開源的消息發佈訂閱系統,它主要⽤
於處理活躍的流式數據,⼤數據量的數據處理上(⽆消息確認機制,但吞吐量⾼),
kafka⽤zk做集羣負載均衡。
項⽬中哪⾥⽤到了kafka,它有什麼特性?
a. 場景:
i. ⼤數據部⻔流數據處理;
ii. elk;
b. 特性:
i. 它被設計爲⼀個分佈式系統,易於向外擴展;
ii. 它同時爲發佈和訂閱提供⾼吞吐量;
iii. 它⽀持多訂閱者,當失敗時能⾃動平衡消費者;
iv. 它將消息持久化到磁盤,因此可⽤於批量消費,例如ETL,以及實時應⽤程序。
kafka數據分區和消費者的關係,kafka的數據offset讀取流程,kafka內
部如何保證順序,結合外部組件如何保證消費者的順序?
1、kafka數據分區和消費者的關係:1個partition只能被同組的⼀個 consumer消費,同組的consumer則起到均衡效果
2、kafka的數據offset讀取流程 ​
1)連接ZK集羣,從ZK中拿到對應topic的partition信息和partition
的Leader的相關信息 ​
2)連接到對應Leader對應的broker ​
3)consumer將⾃⼰保存的offset發送給Leader ​
4)Leader根據offset等信息定位到segment(索引⽂件和⽇志⽂件) ​
5)根據索引⽂件中的內容,定位到⽇志⽂件中該偏移量對應的開始
位置讀取相應⻓度的數據並返回給consumer
3、kafka內部如何保證順序:
kafka只能保證partition內是有序的,但是partition間的有序是沒辦
法的。愛奇藝的搜索架構,是從業務上把需要有序的打到同⼀個 partition。
kafka⼯作流程?
Apache Kafka是分佈式發佈-訂閱消息系統。它最初由LinkedIn公司開
發,之後成爲Apache項⽬的⼀部分。Kafka是⼀種快速、可擴展的、設計內在就 是分佈式的,分區的和可複製的提交⽇志服務。
a. ⽣產者定期向主題發送消息。
b. Kafka代理存儲爲該特定主題配置的分區中的所有消息。 它確保消息
在分區之間平等共享。 如果⽣產者發送兩個消息並且有兩個分區,
Kafka將在第⼀分區中存儲⼀個消息,在第⼆分區中存儲第⼆消息。
c. 消費者訂閱特定主題。
d. ⼀旦消費者訂閱主題,Kafka將向消費者提供主題的當前偏移,並且
還將偏移保存在Zookeeper系綜中。
e. 消費者將定期請求Kafka(如100 Ms)新消息。
f. ⼀旦Kafka收到來⾃⽣產者的消息,它將這些消息轉發給消費者。
g. 消費者將收到消息並進⾏處理。
h. ⼀旦消息被處理,消費者將向Kafka代理髮送確認。
i. ⼀旦Kafka收到確認,它將偏移更改爲新值,並在Zookeeper中更新
它。 由於偏移在Zookeeper中維護,消費者可以正確地讀取下
⼀封郵件,即使在服務器暴⼒期間。
j. 以上流程將重複,直到消費者停⽌請求。
k. 消費者可以隨時回退/跳到所需的主題偏移量,並閱讀所有後續
題目來源主要有網友提供,如文中有誤,歡迎大家批評指正。
歡迎大家加入互動小天地,獲取更多資料分享,向架構師進階。

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