文章出處

Kafka 簡要使用說明

參考文章

Kafka背景及架構介紹http://www.infoq.com/cn/articles/kafka-analysis-part-1
Apache kafka 工作原理介紹https://www.ibm.com/developerworks/cn/opensource/os-cn-kafka/
Kafka集群操作指南 http://blog.jobbole.com/99195/
kafka操作 http://www.cnblogs.com/wanghongjun/p/3647890.html

概念: Partition, consumer group, rebalance

在使用中, 如果要保證消費 Kafka 的數據和生產數據的次序嚴格一致,一個 Topic 只能設置了一個 Partition. 一個 partition 對應著磁盤的一個目錄, 所以如果設置成一個 partition 要求數據的容量不能超過單機磁盤空間, 同時因為是單機讀寫, 吞吐能力會變差.

一個 Topic 可以被多個 consumer group 重復消費, 這些 consumer group 之間是完全隔離的. 一個 consumer group 可以包含一個或多個 consumer, 但消費者個數不應該多于 partition 個數. 如果一個consumer group包含多個 consumer, 它們將均分消費這個 topic.

一句話, 全序的配置方式是, 每個 topic 對應一個 partition, 每個 consumer group 也只能有一個 consumer.

Topic 除了可以設置 Partition 數量外, 還可以設置 ReplicationFactor 復制份數, Partition 是用來均分 topic 的數據量, Replica 是為每個 Partition 作拷貝的, 提高集群的可用性.

Partition/Replica和broker的關系是:
如果一個集群有三個 broker 服務器(分別為 120/121/122), Topic1 共分了6個 Partition, ReplicationFactor 設置為2, 針對每個 Partition 每個 broker 的作用是不同的, 可用命令kafka-topics.sh --describe 查看, 下面結果:

    Topic: Topic1   Partition: 0    Leader: 121 Replicas: 121,122    
    Topic: Topic1   Partition: 1    Leader: 122 Replicas: 122,120    
    Topic: Topic1   Partition: 2    Leader: 120 Replicas: 120,121    
    Topic: Topic1   Partition: 3    Leader: 121 Replicas: 121,120    
    Topic: Topic1   Partition: 4    Leader: 122 Replicas: 122,121    
    Topic: Topic1   Partition: 5    Leader: 120 Replicas: 120,122    

rebalance: 如果 partition 數量不變(供給側), consumer group下的 consumer 數量不變(消費側), Kafaka 是不會做 rebalance 的,. 但如果發生如下情形, Kafaka 就要為 consumer 重新分配 partition :

  • partition 數量改變.
  • consumer group 中新增了 consumer.
  • Kafka broker 檢測到某個 consumer 已經沒有心跳, 相當于 consumer 數量減少

新建 group 如何消費完整的數據?

經常碰到一個場景是, 因為測試或其他需要, 我們想重新消費一個 topic 數據, 操作很簡單, 為消費者設定一個新的 consumer group id, 同時設置 auto.offset.reset 為 earliest 即可.
為什么需要將 auto.offset.reset 特意設置為 earliest 呢? 因為, 默認的設置是 latest, 對于一個新的 group id, Kafka 在 ZooKeeper 中找不到它之前的 offset, 所有歷史的數據都無法被消費, 只有新的數據才會被消費到; 設置為 earliest 就能從最早的 offset 開始消費, Kafka 默認會清空7天前的數據, 也就是說能消費最近7天的所有數據.

幾個重要的屬性

參數 含意 Kafka 缺省值 Kettle Kafka consumer推薦值
topic 要消費哪個topic的數據
group.id 消費者端自行設定一個group id
max consumption duration 消費者持續消費Kafka時長 180 000
session.timeout.ms 如果 broker 超過 session.timeout.ms 設定值還沒有收到消費者的心跳匯報, 就認為消費者已經不在線, 之后 broker 安排做 consumer 之間的 rebalance 10 000 30 0000
heartbeat.interval.ms 消費者主動向 broker 匯報存活的間隔時長, 取值應該是<= session.timeout.ms的1/3 3 000 3 000
request.timeout.ms 消費者消費數據的請求超時值 30 000 400 000
auto.offset.reset 消費者如何讀取 offset, 有三個取值 earliest, latest, none latest 按需
enable.auto.commit 如果需要 Kafaka 自動更新消費的 offset(周期性更新), 設置為 true, 如果由消費者自行更新的話, 可以設置為 false. 推薦使用自動提交, 可以結合 auto.commit.interval.ms 不斷調優; 如果是手動提交的話, 通常僅僅在批次消費完畢后才提交, 吞吐量是很高, 但有可能在commit 之前系統崩潰, 就會造成大量數據的重復消費. true
auto.commit.interval.ms enable.auto.commit 開啟情況下, 用來控制多久commit offset值, 間隔越大吞吐量越大, 但如果 commit 失敗后重復消費的量也越大. 5 000

Kafka 監控的 GUI 工具(基于 Eclipse)

網址 http://www.kafkatool.com/features.html, 個人使用免費


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()