維基百科java
Kafka 是由Apache軟件基金會開發的一個開源流處理平臺,由Scala和JAVA編寫.該項目的目標是爲處理實時數據提供一個統1、高吞吐、低延遲的平臺。其持久化層本質是一個"按照分佈式事務日誌架構的大規模發佈/訂閱消息隊列".Kafka能夠經過Kafka Connect鏈接到外部系統(用於數據輸入/輸出),並提供了Kafka Streams ———— 一個Java流式處理庫.
Kafka 架構說明linux
一個典型的Kafka集羣包含若干Producer,若干Broker,若干Consumer,以及一個Zookeeper集羣。Kafka經過Zookeeper管理集羣配置,選舉Leader,以及在Consumer Group發送變化時進行Rebalance(負載均衡)。Producer 使用push(推)模式將消息發佈到Broker;Consumer 使用pull(拉)模式從Broker訂閱並消費消息。Kafka 四大核心算法
Kafka 基礎概念
生產者的配置
參數 | 描述 |
---|---|
acks | acks 參數指定了必需要有多少個分區副本收到消息,生產者纔會認爲消費寫入是成功的。acks = 0 生產者在成功寫入消息以前不會等待任何來自服務器的響應。(缺點:沒法確認消費是否成功;優勢:高吞吐量);acks = 1 只要集羣的首領節點收到消息,生產者就會收到一個來自服務器的成功響應。若是消費沒法到達首領節點(好比首領節點奔潰,新的首領尚未被選舉處理),生產者會收到一個錯誤響應,爲了不數據丟失,生產者會重發消息。不過,若是一個沒有收到消息的節點成爲新首領,消息仍是會丟失。acks = all 只有當全部參與複製的節點所有收到消息時,生產者纔會收到一個來自服務器的成功響應。 |
buffer.memory | 該參數用來設置生產者緩衝區的大小,生產者用它緩衝要發送到服務器的消息。0.9.0.0 版本被替換成了 max.block.ms,表示在拋出異常以前能夠阻塞一段時間 |
compression.type | 默認狀況下爲none,消費發送時不會被壓縮。該參數能夠設置爲snappy、gzip或lz4,它指定了消息被髮送給broker以前使用哪種壓縮算法進行壓縮。1. snappy 壓縮算法有Google發明,它佔用較少的CPU,卻能提供較好的性能和至關可觀的壓縮比(比較關注性能和網路帶寬) 2. gzip 壓縮算法通常會佔用較多的CPU,但會提供更高的壓縮比(網絡帶寬有限次採用) |
retries | 生產者從服務器收到的錯誤有多是臨時性的錯誤(好比分區找不到首領)。在這中狀況下,retries參數是值決定了生產者能夠重發消息的次數,若是達到這個次數,生產者會放棄重試並返回錯誤。默認狀況下,生產者會在每次重試之間等待100ms,能夠經過retry.backoff.ms參數來改變這個時間間隔. |
batch.size | 當有多個消息須要被髮送到同一個分區時,生產者會把它們放在同一個批次裏。該採納數指定了一個批次可使用的內存大小,按照字節數計算(而不是消息個數)。1. 批次設置很大 不會形成延遲,只會佔用更多的內存 2. 批次設置很小 由於生產者須要更頻繁地發送消息,會增長一些額外的開銷 |
linger.ms | 該參數指定了生產者在發送批次以前等待更多消息加入批次的時間。 |
client.id | 該參數能夠是任意的字符串,服務器會用它來識別消息的來源,還能夠用在日誌和配額指標裏 |
request.timeout.ms | 指定了生產者在發送數據時等待服務器返回響應的時間 |
max.block.ms | 該參數指定了在調用send()方法或使用partitionsFor()方法獲取元數據時生產者的阻塞時間。當生產者的發送緩衝區已滿,或者沒有可用的元數據時,這些方法就會阻塞。在阻塞時間達到max.block.ms時,生產者會拋出超時異常 |
max.request.size | 該參數用於控制生產者發送的請求大小。它能夠指能發送的單個消息的最大值,能夠指單個請求裏全部消息總的大小。 |
數據apache
副本
複製
replicas(ISR);bootstrap
集羣成員關係
處理請求
參數 | 描述 |
---|---|
Request type | API key |
Request version | broker能夠處理不一樣版本的客戶端請求,並根據客戶端版本作出不一樣的響應 |
Correlation ID | 一個具備惟一性的數字,用於標識請求消息,同時也會出如今響應消息和錯誤日誌裏(用於診斷問題) |
Client ID | 用於標識發送請求的客戶端 |
控制器
Kafka 消費過程分析
keyvalue數組
疑問
建立主題時,副本因子應該小於等於可用的broker數緩存
Error while executing topic command : replication factor: 3 larger than available brokers: 1 [2019-07-23 17:34:45,963] ERROR org.apache.kafka.common.errors.InvalidReplicationFactorException: replication factor: 3 larger than available brokers: 1 (kafka.admin.TopicCommand$)