kafka學習筆記三

目錄

第二篇 外部系統集成

第三篇 生產調優手冊

第1章 kafka硬件配置選擇

第2章 生產者調優

2.1 生產者核心參數配置

2.2 生產者如何提高吞吐量

2.3 數據可靠性

2.4 數據去重

2.5 數據有序

2.6 數據亂序

第3章 Kafka Broker調優

3.1 Broker核心參數配置

3.2 其他

第4章 消費者調優

4.1 消費者核心參數配置

4.2 消費者再平衡

4.3 指定offset消費

4.4 指定時間消費

4.5?消費者事務

4.6?消費者如何提高吞吐量

第5章 Kafka總體看調優

5.1 如何提升吞吐量★★★★★

5.2 數據精準一次

5.3 合理設置分區數

5.4 單條日志大于1m

5.5 服務器掛了

5.6 集群壓力測試

第四篇 源碼分析

第2章 生產者源碼

2.1 初始化

2.2?之后的略,詳見文檔

2.3 畫圖軟件推薦drawio


第二篇 外部系統集成

Flume、Spark、Flink、SpringBoot 這些組件都可以作為kafka的生產者和消費者,在企業中非常常見。

Flume官網:Welcome to Apache Flume — Apache Flume

Flink:Apache Flink_百度百科?

Spark:Apache Spark_百度百科

集成SpringBoot:略。?

第三篇 生產調優手冊

第1章 kafka硬件配置選擇

第2章 生產者調優

2.1 生產者核心參數配置

發送流程:做到心中有圖,回憶。

生產者核心參數:

參數名稱描述
bootstrap.servers生產者連接集群所需的 broker 地址清單。例如hadoop102:9092,hadoop103:9092,hadoop104:9092,可以設置 1 個或者多個,中間用逗號隔開。注意這里并非需要所有的 broker 地址,因為生產者從給定的 broker 里查找到其他 broker 信息。
key.serializer 和 value.serializer
?
指定發送消息的 key 和 value 的序列化類型。一定要寫全類名。
buffer.memoryRecordAccumulator 緩沖區總大小,默認32m
batch.size緩沖區一批數據最大值,默認16k。適當增加該值,可以提高吞吐量,但是如果該值設置太大,會導致數據傳輸延遲增加。
linger.ms如果數據遲遲未達到 batch.size,sender 等待 linger.time之后就會發送數據。單位 ms,默認值是 0ms,表示沒有延遲。生產環境建議該值大小為 5-100ms 之間。
acks0:生產者發送過來的數據,不需要等數據落盤應答。
1:生產者發送過來的數據,Leader 收到數據后應答。
-1(all):生產者發送過來的數據,eader+和 isr 隊列里面的所有節點收齊數據后應答。默認值是-1,-1 和 all是等價的。
max.in.flight.requests.per.connection允許最多沒有返回 ack 的次數,默認為 5,開啟冪等性要保證該值是 1-5 的數字。
retries當消息發送出現錯誤的時候,系統會重發消息。retries 表示重試次數。默認是 int 最大值,2147483647。如果設置了重試,還想保證消息的有序性,需要設置MAX_IN_FLIGHT_REQUESTS_PER_CONNECTION=1,否則在重試此失敗消息的時候,其他的消息可能發送成功了。
retry.backoff.ms兩次重試之間的時間間隔,默認是 100ms
enable.idempotence是否開啟冪等性,默認 true,開啟冪等性。
compression.type生產者發送的所有數據的壓縮方式。默認是 none,也就是不壓縮。支持壓縮類型:none、gzip、snappy、lz4 和 zstd。

2.2 生產者如何提高吞吐量

2.3 數據可靠性

2.4 數據去重

略。

2.5 數據有序

單分區內,有序(有條件的,不能亂序);多分區,分區與分區間無序。

2.6 數據亂序

第3章 Kafka Broker調優

3.1 Broker核心參數配置

Kafka Broker總體工作流程:心中有圖,回憶。

Broker核心參數:

參數名稱

描述

replica.lag.time.max.ms

ISR 中,如果 Follower 長時間未向 Leader 發送通信請求或同步數據,則該 Follower 將被踢出 ISR。該時間閾值,默認 30s

auto.leader.rebalance.enable

默認是 true。 自動 Leader Partition 平衡。建議關閉。

leader.imbalance.per.broker.percentage

默認是 10%。每個 broker 允許的不平衡的 leader的比率。如果每個 broker 超過了這個值,控制器會觸發 leader 的平衡。

leader.imbalance.check.interval.seconds

默認值 300 秒。檢查 leader 負載是否平衡的間隔時間。

log.segment.bytes

Kafka 中 log 日志是分成一塊塊存儲的,此配置是指 log 日志劃分成塊的大小,默認值 1G

log.index.interval.bytes

默認4kb,kafka 里面每當寫入了 4kb 大小的日志(.log),然后就往 index 文件里面記錄一個索引。

log.retention.hours

Kafka 中數據保存的時間,默認 7 天。生成中一般設置3天

log.retention.minutes

Kafka 中數據保存的時間,分鐘級別,默認關閉。

log.retention.ms

Kafka 中數據保存的時間,毫秒級別,默認關閉。

log.retention.check.interval.ms

檢查數據是否保存超時的間隔,默認是 5 分鐘。

log.retention.bytes

默認等于-1,表示無窮大。超過設置的所有日志總大小,刪除最早的 segment。

log.cleanup.policy

默認是 delete,表示所有數據啟用刪除策略;
如果設置值為 compact,表示所有數據啟用壓縮策略。

num.io.threads

默認是 8。負責寫磁盤的線程數。整個參數值要占總核數的 50%。

num.replica.fetchers

默認是 1。副本拉取線程數,這個參數占總核數的 50%的 1/3

num.network.threads

默認是 3。數據傳輸線程數,這個參數占總核數的 50%的 2/3 。

log.flush.interval.messages

強制頁緩存刷寫到磁盤的條數,默認是 long 的最大值,9223372036854775807。一般不建議修改,交給系統自己管理。

log.flush.interval.ms

每隔多久,刷數據到磁盤,默認是 null。一般不建議修改,交給系統自己管理。

?

3.2 其他

1. 服役/退役新節點

(1)創建一個要均衡的主題。

(2)生成一個負載均衡的計劃。

(3)創建副本存儲計劃(所有副本存儲在 broker0、broker1、broker2、broker3 中)。

(4)執行副本存儲計劃。

(5)驗證副本存儲計劃。

2. 增加分區

分區只能增加,不能減少。

[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server
hadoop102:9092 --alter --topic first --partitions 3

3. 增加副本因子

4. 手動調整分區副本存儲

5. Leader Partition負載均衡

6. 自動創建主題

如果 broker 端配置參數 auto.create.topics.enable 設置為 true(默認值是 true),那么當生
產者向一個未創建的主題發送消息時,會自動創建一個分區數為 num.partitions(默認值為
1)、副本因子為 default.replication.factor(默認值為 1)的主題。除此之外,當一個消費者
開始從未知主題中讀取消息時,或者當任意一個客戶端向未知主題發送元數據請求時,都會
自動創建一個相應主題。這種創建主題的方式是非預期的,增加了主題管理和維護的難度。
生產環境建議將該參數設置為 false。

第4章 消費者調優

4.1 消費者核心參數配置

消費者組初始化流程:回憶。

消費者組詳細消費流程如下:

消費者核心參數:

參數名稱描述
bootstrap.servers?向 Kafka 集群建立初始連接用到的 host/port 列表。
key.deserializer 和 value.deserializer指定接收消息的 key 和 value 的反序列化類型。一定要寫全類名。
group.id標記消費者所屬的消費者組。
enable.auto.commit默認值為 true,消費者會自動周期性地向服務器提交偏移量。
auto.commit.interval.ms如果設置了 enable.auto.commit 的值為 true, 則該值定義了消費者偏移量向 Kafka 提交的頻率,默認 5s
auto.offset.reset當 Kafka 中沒有初始偏移量或當前偏移量在服務器中不存在(如,數據被刪除了),該如何處理??
earliest:自動重置偏移量到最早的偏移量。 latest:默認,自動重置偏移量為最新的偏移量。?
none:如果消費組原來的(previous)偏移量不存在,則向消費者拋異常。?
anything:向消費者拋異常。
offsets.topic.num.partitions__consumer_offsets 的分區數,默認是 50 個分區。不建議修改
heartbeat.interval.msKafka 消費者和 coordinator 之間的心跳時間,默認 3s。該條目的值必須小于 session.timeout.ms ,也不應該高于session.timeout.ms 的 1/3。不建議修改。
session.timeout.ms?Kafka 消費者和 coordinator 之間連接超時時間,默認 45s。超過該值,該消費者被移除,消費者組執行再平衡。
max.poll.interval.ms消費者處理消息的最大時長,默認是 5 分鐘。超過該值,該消費者被移除,消費者組執行再平衡。
fetch.min.bytes默認 1 個字節。消費者獲取服務器端一批消息最小的字節數。
fetch.max.wait.ms默認 500ms。如果沒有從服務器端獲取到一批數據的最小字節數。該時間到,仍然會返回數據。
fetch.max.bytes默認 Default: 52428800(50 m)。消費者獲取服務器端一批消息最大的字節數。如果服務器端一批次的數據大于該值(50m)仍然可以拉取回來這批數據,因此,這不是一個絕對最大值。一批次的大小受 message.max.bytes (broker config)or max.message.bytes (topic config)影響。
max.poll.records一次 poll 拉取數據返回消息的最大條數,默認是 500 條

4.2 消費者再平衡

4.3 指定offset消費

4.4 指定時間消費

4.5?消費者事務

4.6?消費者如何提高吞吐量

回憶。

第5章 Kafka總體看調優

5.1 如何提升吞吐量★★★★★

1)提升生產吞吐量

(1)buffer.memory:發送消息的緩沖區大小,默認值是 32m,可以增加到 64m。

(2)batch.size:默認是 16k。如果 batch 設置太小,會導致頻繁網絡請求,吞吐量下降;
如果 batch 太大,會導致一條消息需要等待很久才能被發送出去,增加網絡延時。

(3)linger.ms,這個值默認是 0,意思就是消息必須立即被發送。一般設置一個 5-100毫秒。如果 linger.ms 設置的太小,會導致頻繁網絡請求,吞吐量下降;如果 linger.ms 太長,會導致一條消息需要等待很久才能被發送出去,增加網絡延時。

(4)compression.type:默認是 none,不壓縮,但是也可以使用 lz4 壓縮,效率還是不錯的,壓縮之后可以減小數據量,提升吞吐量,但是會加大 producer 端的 CPU 開銷。

2)增加分區

3)消費者提高吞吐量

(1)調整 fetch.max.bytes 大小,默認是 50m。

(2)調整 max.poll.records 大小,默認是 500 條。

4)增加下游消費者處理能力

5.2 數據精準一次

1) 生產者角度

  • acks 設置為-1 (acks=-1)。
  • 冪等性(enable.idempotence = true) + 事務 。

2) broker服務端角度

  • 分區副本大于等于2(--replication-factor 2)。
  • ISR 里應答的最小副本數量大于等于2(min.insync.replicas = 2)。

3) 消費者

  • 事務 + 手動提交offset(enable.auto.commit = false)。
  • 消費者輸出的目的地必須支持事務(MySQL、Kafka)。

5.3 合理設置分區數

(1)創建一個只有 1 個分區的 topic。

(2)測試這個 topic 的 producer 吞吐量和 consumer 吞吐量。

(3)假設他們的值分別是 Tp 和 Tc,單位可以是 MB/s。

(4)然后假設總的目標吞吐量是 Tt,那么分區數 = Tt / min(Tp,Tc)。

例如:producer 吞吐量 = 20m/s;consumer 吞吐量 = 50m/s,期望吞吐量 100m/s;

分區數 = 100 / 20 = 5 分區

分區數一般設置為:3-10 個

分區數不是越多越好,也不是越少越好,需要搭建完集群,進行壓測,再靈活調整分區個數。


5.4 單條日志大于1m

5.5 服務器掛了

在生產環境中,如果某個 Kafka 節點掛掉。

正常處理辦法:

(1)先嘗試重新啟動一下,如果能啟動正常,那直接解決。

(2)如果重啟不行,考慮增加內存、增加 CPU、網絡帶寬。

(3)如果將 kafka 整個節點誤刪除,如果副本數大于等于 2,可以按照服役新節點的方式重新服役一個新節點,并執行負載均衡。

5.6 集群壓力測試

1. 生產者壓力測試

通過動態調整以下4個參數來控制

  • batch.size=16384
  • linger.ms=0
  • compression.type
  • buffer.memory

2. 消費者壓力測試

  • max.poll.records(一次拉取條數)默認是500條;
  • fetch.max.bytes(拉取一批數據大小)默認是50M;

通過修改這兩個參數的值來進行測試。這兩個參數在kafka/config/consumer.properties 文件中進行配置。這兩個參數可以提高吞吐量。

=========================源碼解析=============================

第四篇 源碼分析

第2章 生產者源碼

回憶發送流程原理圖,結合原理圖看源碼更容易。

發送流程:

2.1 初始化

更多內容,見文檔。

2.2?之后的略,詳見文檔

2.3 畫圖軟件推薦drawio

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713608.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713608.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713608.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

禪道:提bug、管理case 7.0

一、禪道的介紹 (1)定義禪道是一個項目管理工具,也是一個bug管理工具,還是一個用例管理工具。 (2)作用:為了解決眾多企業在管理中出現混亂,無序的現象,開發出來 &…

ppt中調整某條表格框線的格式

1、先設置好邊框線的屬性: 2、選擇要調整的邊框線所在的單元格(第二列的右邊框加粗,體現分欄的效果) 3、設計--邊框--中選擇要調整的邊框線位置(假設要調整右框線)

精讀服務器默認rsyslog的配置文件

rsyslog的配置文件 rsyslog.conf #### MODULES ####$ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imjournal # provides access to the systemd journal #$ModLoad imklog # reads kernel messages (the same are read…

JavaScript解決生日倒計時的問題

創建一個文本框&#xff0c;在一個文本框中&#xff0c;讓用戶輸入他的出生月份&#xff0c;第二個文本框中輸入月份中的日期&#xff0c;編寫一個JavaScript程序&#xff0c;在第三個文本框中打印距離用戶生日還有多少天。 <div id"box"><label for"&…

libvirt命名空間xmlns:qemu的使用

示例xml <domain type{domain_type} xmlns:qemuhttp://libvirt.org/schemas/domain/qemu/1.0><qemu:commandline><qemu:commandline><qemu:arg value-newarg/><qemu:env nameQEMU_ENV valueVAL/></qemu:commandline></domain>"…

13、輸入捕獲實驗

目錄 一、通用定時器輸入捕獲概述 二、常用寄存器和庫函數配置 三、輸入捕獲實驗講解 一、通用定時器輸入捕獲概述 STM32輸入捕獲工作過程&#xff08;通道1為例&#xff09; 一句話總結工作過程&#xff1a; 通過檢測TIMx_CHx上的邊沿信號&#xff0c;在邊沿信號發生跳變…

28.HarmonyOS App(JAVA)多頁簽的實現(Tab)

HarmonyOS App(JAVA)多頁簽的實現&#xff08;Tab&#xff09; 頁面可左右滑動&#xff0c;點擊界面1,2,3切換到對應界面 PageSlider的創建和使用 在layout目錄下的xml文件中創建PageSlider。 <PageSlider ohos:id"$id:page_slider" ohos:height"300vp&…

2D割草/吸血鬼游戲 性能優化——GPU Spine動畫

視頻中萬人同屏方案(gpu動畫、渲染、索敵、避障等功能)&#xff0c;可某寶搜店鋪&#xff1a;【游戲開發資源商店】獲取整套方案源碼。 在過去的幾年里&#xff0c;割草、類吸血鬼玩法的游戲頻出爆款&#xff0c;其豐富的技能、滿屏特效、刷怪清屏的解壓暢快是此類游戲的核心&…

【MySQL】復合查詢(重點)-- 詳解

一、基本查詢練習回顧 1、查詢工資高于 500 或崗位為 MANAGER 的雇員&#xff0c;同時還要滿足他們的姓名首字母為大寫的 J 2、按照部門號升序而雇員的工資降序排序 3、使用年薪進行降序排序 4、顯示工資最高的員工的名字和工作崗位 5、顯示工資高于平均工資的員工信息 6、顯…

韋東山嵌入式Liunx入門驅動開發四

文章目錄 一、異常與中斷的概念及處理流程1-1 中斷的引入1-2 棧(1) CPU實現a ab的過程(2) 進程與線程 1-3 Linux系統對中斷處理的演進1-4 Linux 中斷系統中的重要數據結構(1) irq_desc 結構體(2) irqaction 結構體(3) irq_data 結構體(4) irq_domain 結構體(5) irq_domain 結構…

Redis入門與應用

Redis入門與應用 Redis的技術全景 Redis一個開源的基于鍵值對&#xff08;Key-Value&#xff09;NoSQL數據庫。使用ANSI C語言編寫、支持網絡、基于內存但支持持久化。性能優秀&#xff0c;并提供多種語言的API。 兩大維度 兩大維度&#xff1a;應用維度、底層原理維度 我們…

Java面試題:解釋Java內存模型中的棧內存和本地方法棧的區別,解釋Java中的垃圾回收機制中的增量收集算法,解釋Java內存模型中的直接內存的作用

Java內存模型與JVM面試題解析 在Java面試中&#xff0c;對Java內存模型&#xff08;JMM&#xff09;的理解是衡量候選人是否具備扎實Java功底的重要指標。JMM涵蓋了JVM的內存結構&#xff0c;包括堆、棧、方法區等關鍵組件&#xff0c;以及垃圾回收機制等核心概念。下面&#…

記一次dockerfile無法構建問題追溯

我有一個dockerfile如下&#xff1a; ENTRYPOINT ["/sbin/tini"&#xff0c;"-g", "--"] CMD /home/scrapy/start.sh 我原本的用意是先啟動tini&#xff0c;再執行下面的cmd命令啟動start.sh。 為啥要用tini&#xff1f; 因為我的這個docker…

git介紹4.2

git(版本控制工具) 一、git 介紹 1、git是目前世界上最先進的分布式版本控制系統&#xff0c;可以有效&#xff0c;高速的處理從小到大的項目版本管理。 2、git是linux torvalds 為了幫助管理linux內核開發二開發的一個開放源碼的版本控制軟件。 3、git作用&#xff1a;更好…

谷歌內部文件泄露:開源AI將領先谷歌與OpenAI

摘要&#xff1a; 一個谷歌研究員的內部文件透露&#xff0c;當前的人工智能&#xff08;AI&#xff09;競賽中&#xff0c;谷歌和OpenAI可能無法取勝。開源AI項目因其快速創新和低成本實現而已在悄悄領先&#xff0c;它們表現出在自定義性、隱私保護、以及性能方面的明顯優勢。…

PageHelper開源框架解讀

在使用springboot開發系統時&#xff0c;列表查詢經常會用PageHelper來進行分頁。使用起來很方便&#xff0c;但從未想過它的實現原理&#xff0c;所以對其進行解讀。 Service public class ScUserServiceImpl extends ServiceImpl<ScUserMapper, ScUser> implements IS…

WIN10 無密碼自動登錄

1、家里重裝了一下WIN10系統&#xff0c;第一次登陸居然用了微軟網站賬號&#xff0c;結果密碼忘記了&#xff0c;后面只能用PIN碼登陸系統。 2、需要登錄微軟的網站修改密碼&#xff1a; Microsoft account | Sign In or Create Your Account Today – Microsoft 3、在運行…

Linux-Prnt10:幾款國際打印機

這周接觸到惠普國際生產的幾款打印機設備&#xff0c;hplip的官網更新記錄里居然都沒有&#xff0c;特地確認了下其中緣由。這三款設備的型號分別是mpressora HP Laser 107w、mpressora Multifuncional HP Laser MFP 135a、mpressora Multifuncional HP Laser MFP 135w&#xf…

APP自動化測試-入門示例

入門示例 通過上一篇博客APP自動化測試介紹-CSDN博客的學習&#xff0c;相信大家對APP自動化測試已經有了一定的了解&#xff0c;下面演示一下入門示例 1. 配置Appium 1.1. 點擊Appium圖標&#xff0c;打開服務器&#xff1a; 1.2. 點擊Edit Configurations,進入配置頁面&am…

【LeetCode】【滑動窗口長度不固定】978 最長湍流子數組

1794.【軟件認證】最長的指定瑕疵度的元音子串 這個例題&#xff0c;是滑動窗口中長度不定求最大的題目&#xff0c;在看題之前可以先看一下【leetcode每日一題】【滑動窗口長度不固定】案例。 題目描述 定義&#xff1a;開頭和結尾都是元音字母&#xff08;aeiouAEIOU&…