Kafka是LinkedIn公司使用Scala語(yǔ)言開(kāi)發(fā),后來(lái)捐獻(xiàn)給apache的項(xiàng)目。官網(wǎng)地址是http://kafka.apache.org。是常用的以高吞吐、可持久化、可水平擴(kuò)展、支持流處理的分布式消息系統(tǒng)。
簡(jiǎn)單架構(gòu)圖:
生產(chǎn)端:邏輯層生產(chǎn)者將消息發(fā)到指定的topic中,物理層,生產(chǎn)者先找到相應(yīng)的集群和對(duì)應(yīng)的leader partition建立連接發(fā)送消息。
消費(fèi)端:邏輯層消費(fèi)組接收此topic的所有消息,物理層消費(fèi)組的消費(fèi)者連接到固定的partition來(lái)消費(fèi)消息。
在物理層上包裝邏輯層也是一個(gè)比較常見(jiàn)的解耦方法:比如很多公司都是多地域多中心的多活容災(zāi)架構(gòu)。在物理層北京亦莊數(shù)據(jù)中心、上海桂橋數(shù)據(jù)中心等物理數(shù)據(jù)中心上劃分邏輯數(shù)據(jù)中心,數(shù)據(jù)中心的遷移可以做到應(yīng)用服務(wù)不感知。底層的實(shí)現(xiàn)原理也很簡(jiǎn)單就是標(biāo)簽+路由層。
Kafka集群的一臺(tái)服務(wù)端和其他應(yīng)用一樣,是由應(yīng)用+數(shù)據(jù)組成,可以算作是一個(gè)分布式文件系統(tǒng)。大多數(shù)的分布式文件系統(tǒng)就是主從架構(gòu)如Mysql、Kubernetes和Kafka,個(gè)別是對(duì)等式的架構(gòu)如ElasticSearch。Kafka的主節(jié)點(diǎn)被稱(chēng)為Controller,負(fù)責(zé)和Zookeeper通信、集群成員管理(Broker上下線(xiàn))和Topic管理(增刪改查)。Zookeeper里存儲(chǔ)的是集群的元數(shù)據(jù)信息。簡(jiǎn)而言之,Controller的功能可以類(lèi)比Kubernetes等集群的Controller功能,差不多的。
數(shù)據(jù)存儲(chǔ)上,每個(gè)partition物理上是一個(gè)文件夾,相當(dāng)于將一個(gè)巨型文件分成多個(gè)大小相等的segment文件。每個(gè)文件的消息數(shù)不一定相等。每個(gè)partition文件由于是順序讀寫(xiě),所以老的segment文件可以快速被刪除。
一個(gè)segment文件由一個(gè)index文件和一個(gè)數(shù)據(jù)文件組成。文件名為上一個(gè)文件的最后一條消息的offset值。索引文件是稀疏索引。所謂稀疏索引說(shuō)白了就是說(shuō)不是每條消息都有索引,間隔幾條才會(huì)有。數(shù)據(jù)文件也叫日志文件,里面都是一條條消息數(shù)據(jù)。
Kafka實(shí)際項(xiàng)目使用的思考:切換加密集群,安全上的需要,連接Kafka集群需要加密,使用的SASL簡(jiǎn)單認(rèn)證和安全層。假設(shè)說(shuō)我們使用的是用戶(hù)名密碼+SSL認(rèn)證。
kafka參數(shù)調(diào)優(yōu):
在項(xiàng)目中實(shí)際使用,很多人都是網(wǎng)上copy對(duì)應(yīng)的配置,并不知道他們之前的參數(shù)的相互影響。比如出現(xiàn)rebalance后產(chǎn)生的結(jié)果是具體以哪種方式引起的排查,我列舉幾種原因:
1.數(shù)據(jù)量大,消費(fèi)不及時(shí)引起循環(huán)堆積
2.超時(shí)時(shí)間配置過(guò)小
3.批處理的時(shí)效性過(guò)慢
問(wèn)題排查:當(dāng)數(shù)據(jù)量大的時(shí)候,一次性獲取500條數(shù)據(jù),但是實(shí)際吞吐時(shí)長(zhǎng)已經(jīng)超過(guò)了心跳檢測(cè)時(shí)間,那么就可能導(dǎo)致數(shù)據(jù)在偏移到一定數(shù)值時(shí),被判定這個(gè)消費(fèi)組掛掉,就直接離線(xiàn),頻繁觸發(fā)rebalance這種情況。
解決方式:先知道當(dāng)前獲取一批數(shù)據(jù)消費(fèi)時(shí)間,覺(jué)得過(guò)長(zhǎng)可以?xún)?yōu)化邏輯(治本)以及修改max-poll-records拉取的批次數(shù)(減少批次數(shù),只治標(biāo)),適當(dāng)增加heartbeat-interval-ms的檢測(cè)時(shí)間,同時(shí)要保證session-timeout-ms的時(shí)間要大于heartbeat-interval-ms,不然也會(huì)修改參數(shù)無(wú)效這種情況。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-474756.html
調(diào)優(yōu)的配置文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-474756.html
# 消費(fèi)組
group-id: in-tsp-pre
# 偏移量獲取方式
auto-offset-reset: latest
# 是否自動(dòng)提交
enable-auto-commit: false
# auto-commit-interval: 100
# 批次獲取數(shù)
max-poll-records: 500
# 批次提交最大時(shí)長(zhǎng)
max-poll-interval-ms: 600000
# 心跳檢測(cè) 低于session-timeout-ms的三分之一
heartbeat-interval-ms: 10000
# 超時(shí)時(shí)間
session-timeout-ms: 30000
到了這里,關(guān)于kafka基本架構(gòu)以及參數(shù)調(diào)優(yōu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!