5.1 網(wǎng)絡(luò)層
網(wǎng)絡(luò)層是一個(gè)相當(dāng)直接的NIO服務(wù)器,不再詳細(xì)描述柔逼。 sendfile的實(shí)現(xiàn)是通過給MessageSet接口提供writeTo方法來完成的辐真。這允許file-backed的消息集使用更高效的transferTo實(shí)現(xiàn)而不是進(jìn)程內(nèi)緩沖寫入。線程模型是單個(gè)接受器線程和N個(gè)處理器線程贝搁,每個(gè)線程處理固定數(shù)量的連接必逆。這種設(shè)計(jì)在其他地方經(jīng)過了相當(dāng)全面的測(cè)試怠堪,發(fā)現(xiàn)它易于實(shí)現(xiàn)且速度快。協(xié)議一直非常簡單末患,以便將來使用其他語言實(shí)現(xiàn)客戶端研叫。
5.2 消息
消息由可變長度頭,可變長度不透明密鑰字節(jié)數(shù)組和可變長度不透明值字節(jié)數(shù)組組成璧针。標(biāo)題的格式將在下一節(jié)中介紹嚷炉。保留密鑰和值不透明是正確的決定:目前在序列化庫上取得了很大進(jìn)展,任何特定的選擇都不太適合所有用途探橱。毋庸置疑申屹,使用Kafka的特定應(yīng)用程序可能會(huì)強(qiáng)制使用特定的序列化類型作為其使用的一部分。 RecordBatch接口只是消息的迭代器隧膏,具有用于批量讀取和寫入NIO通道的專用方法哗讥。
5.3 消息格式
消息(即記錄)始終批量寫入。 消息的批次的專業(yè)術(shù)語是一個(gè)記錄批次胞枕,而記錄批次包含一個(gè)或多個(gè)記錄杆煞。 在退化的情況下,我們可能有一個(gè)包含單個(gè)記錄的記錄批次腐泻。 記錄批次和記錄都有自己的頭部决乎。 每種格式如下所述。