kafka版本:0.10.1.0
將kafka源碼下載下來導(dǎo)入idea后都會(huì)看到一個(gè)example包饭耳,這個(gè)包里面有生產(chǎn)者和消費(fèi)者的例子呼猪,教我們?nèi)绾问褂枚渎啵瑐€(gè)人認(rèn)為這里面的例子是我們學(xué)習(xí)源碼最好的入口浇垦。
在初始化生產(chǎn)者之前會(huì)設(shè)置一些配置蹦锋,包括kafka地址兆沙,key、value序列化器等莉掂,當(dāng)然上面例子中的配置在我們實(shí)際使用時(shí)是遠(yuǎn)遠(yuǎn)不夠的葛圃,后面在分析過程中會(huì)整理一些針對kafka調(diào)優(yōu)的參數(shù)。
個(gè)人習(xí)慣在核心代碼上面加一個(gè)todo憎妙,并注明這段代碼的目的库正。new KafkaProducer<>(props); 點(diǎn)進(jìn)去
點(diǎn)進(jìn)去可以看到KafkaProducer提供了多種構(gòu)造方法,也可以自定義序列化器厘唾,一般我們使用kafka的key褥符、value序列化器即可,這里面只傳進(jìn)去了我們自定義的配置抚垃。繼續(xù)點(diǎn)進(jìn)去喷楣。
這里面比較重要的是趟大,設(shè)置分區(qū)器和設(shè)置重試時(shí)間,我們知道kafka的一個(gè)topic可以有多個(gè)分區(qū)铣焊,那么發(fā)送消息的時(shí)候具體發(fā)送到哪個(gè)分區(qū)中也是有一定策略的逊朽,后面會(huì)深入講解。并且kafka也支持消息重試曲伊,retry.backoff.ms 表示每次重試的時(shí)間間隔叽讳。
讀到這里我們發(fā)現(xiàn)很多參數(shù)在example包里面的例子中都是沒有設(shè)置的,如果我們沒有設(shè)置熊昌,就會(huì)走默認(rèn)的配置绽榛,那么這些默認(rèn)配置不一定符合我們實(shí)際生產(chǎn)中的需求,這就是一些調(diào)優(yōu)項(xiàng)婿屹,當(dāng)然也是根據(jù)不同場景來修改的灭美。
這段代碼初始化了三大重要組件:
1、RecordAccumulator 對象昂利,kafka發(fā)送數(shù)據(jù)實(shí)際上也是批量發(fā)送的届腐,這個(gè)對象是保證kafka高吞吐的重要設(shè)計(jì)
2、NetworkClient 管理網(wǎng)絡(luò)的重要組件
3蜂奸、Sender 線程犁苏,也是真正發(fā)送數(shù)據(jù)的線程
至此,生產(chǎn)者就初始化好了扩所,但是目前為止只是粗略的過了一下流程围详,后面進(jìn)行細(xì)節(jié)分析~