Kafka原始碼分析之KafkaProducer

2021-07-11 03:16:44 字數 1861 閱讀 7528

kafkaproducer是乙個kafka客戶端實現,可以發布記錄records至kafka集群。kafkaproducer是執行緒安全的,多執行緒之間共享單獨乙個producer例項通常會比多個producer例項要快。kafkaproducer包含一組快取池空間,儲存尚未傳輸到集群的記錄records,同時,乙個後台的i/o執行緒負責將這些記錄轉換成請求,並傳送至集群。使用之後關閉producer失敗將會導致這些資源洩露。

我們看下kafkaproducer都有哪些成員變數,如下:

// 客戶端id:clientid

private string clientid;

// 分割槽器partitioner例項partitioner

private final partitioner partitioner;

// 最大請求大小maxrequestsize

private final int maxrequestsize;

// 記憶體總計大小totalmemorysize

private final long totalmemorysize;

// 集群元資料metadata例項metadata

private final metadata metadata;

// 記錄收集器recordaccumulator例項accumulator

private final recordaccumulator accumulator;

// 後台傳送執行緒sender例項sender

private final sender sender;

// 指標度量

private final metrics metrics;

// io執行緒iothread

private final thread iothread;

// 壓縮型別compressiontype例項compressiontype

private final compressiontype compressiontype;

private final sensor errors;

// 時間器

private final time time;

// key序列化器keyserializer

private final serializerkeyserializer;

// value序列化器valueserializer

private final serializervalueserializer;

// producer配置資訊producerconfig例項producerconfig

private final producerconfig producerconfig;

// 最大阻塞時間maxblocktimems

private final long maxblocktimems;

// 請求超時時間requesttimeoutms

private final int requesttimeoutms;

其中,比較重要的幾個是:

1、分割槽器partitioner例項partitioner:由它負責計算分割槽,確定主題內的實際儲存位置;

2、集群元資料metadata例項metadata:儲存了整個集群的元資料資訊,包括節點列表、主題列表、主題與分割槽列表對映等資訊;

3、記錄收集器recordaccumulator例項accumulator:通過kafkaproducer傳送的訊息不會立即被傳送到集群,而是先快取在客戶端記憶體緩衝池中,等待後台i/o執行緒處理;

4、後台傳送執行緒sender例項sender:乙個後台工作的i/o執行緒,由它負責將客戶端記憶體緩衝池中的資料傳送到集群;

kafkaproducer的構造方法

Kafka原始碼分析之KafkaProducer

kafkaproducer是乙個kafka客戶端實現,可以發布記錄records至kafka集群。kafkaproducer是執行緒安全的,多執行緒之間共享單獨乙個producer例項通常會比多個producer例項要快。kafkaproducer包含一組快取池空間,儲存尚未傳輸到集群的記錄reco...

kafka原始碼分析 kafkaconsumer

kafkaconsumer 對於多執行緒訪問是不安全的,通過使用acquire 跟release 方法來操作atomiclong currentthread字段 儲存當前訪問執行緒id 有多個執行緒同時訪問丟擲concurrentmodificationexception,來防止對個執行緒同時訪問。...

Kafka原始碼分析(一)

apache kafka 是 乙個分布式流處理平台.這到底意味著什麼呢?我們知道流處理平台有以下三種特性 它可以用於兩大類別的應用 為了理解kafka是如何做到以上所說的功能,從下面開始,我們將深入探索kafka的特性。首先是一些概念 kafka有四個核心的api 讓我們首先深入了解下kafka的核...