Java技術面試-Kafka

1. activeMq與kafka的區別
  • 吞吐量
    (1)activeMq較低,磁盤隨機讀寫 ;
    (2)kafka較高吞吐量,內部採用消息的批量處理,數據的存儲和獲取是本地磁盤順序批量讀寫 ;
  • 遊標位置
    (1)activeMq amq來管理,無法讀取歷史數據;
    (2)kafka客戶端自己管理,不樂意甚至重新讀一遍都可以
  • HA機制(高可用)
    (1)activeMq,主從機制, 主動複製,競爭鎖的方式來選舉;
    (2)kafka: 和hadoop系列產品一樣,分佈式,由zk管理
    -容錯
    (1)Kafka每個Partition的數據都會複製到幾臺服務器上。當某個Broker故障失效時,ZooKeeper服務將通知生產者和消費者,生產者和消費者轉而使用其它Broker。

說到底,做爲kafka的消費方,能感受到最大的不同還是在於幾個:

(1)吞吐量確實非常高;
(2)可以重讀歷史數據;
(3)但是也有一些缺點:概念上比較複雜,相對於AMQ只需要知道ip和隊列名你就能獲得數據,Kafka使用起來非常繁瑣

2. Kafka 的缺點
  • 重複消息
    Kafka 只保證每個消息至少會送達一次,雖然機率很小,但一條消息有可能會被送達多次。
  • 消息亂序
    雖然一個Partition 內部的消息是保證有序的,但是如果一個Topic 有多個Partition,Partition 之間的消息送達不保證有序。
  • 複雜性
    Kafka需要zookeeper 集羣的支持,Topic通常需要人工來創建,部署和維護較一般消息隊列成本更高

kafka重複消費問題的說明:

kafka在理論上的確存在重複消費的問題,比清結算平臺,對接交易數據時,通過數據庫主鍵來控制重複數據入庫,而在消息中心正常情況下,也不會有消息重複,及時在偶爾在部署服務的時候,會有重複消費,也是可以接受的。

消息中心採用的同步提交:手動提交offset,防止業務處理時間過長,offset未及時提交導致重複消費

3. Kafka的基本概念(摘錄)
  • (1)Broker:消息中間件處理結點,一個Kafka節點就是一個broker,多個broker可以組成一個Kafka集羣。
  • (2)Topic:一類消息,例如page view日誌、click日誌等都可以以topic的形式存在,Kafka集羣能夠同時負責多個topic的分發。
  • (3)Partition:topic物理上的分組,一個topic可以分爲多個partition,每個partition是一個有序的隊列。
  • (4)Segment:partition物理上由多個segment組成。
  • (5)offset:每個partition都由一系列有序的、不可變的消息組成,這些消息被連續的追加到partition中。partition中的每個消息都有一個連續的序列號叫做offset,用於partition唯一標識一條消息.
4. Kafka消費端的常用參數
Properties props = new Properties();
//zk服務器的地址  xxxx:2181
props.put("zookeeper.connect", zookeeper);
//組的名稱,區別於其他group否則會接收不到數據
props.put("group.id", groupId);
props.put("zookeeper.session.timeout.ms", "8000");
props.put("zookeeper.connection.timeout.ms", "20000");
props.put("zookeeper.sync.time.ms", "2000");
props.put("auto.commit.interval.ms", "5000");
props.put("rebalance.max.retries", "5");
props.put("rebalance.backoff.ms", "60000");
props.put("auto.commit.enable", "true");
//重點參數,是否每次都從offset最前面開始讀起
props.put("auto.offset.reset", "smallest");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章