UNPKG

kafkajs

Version:

A modern Apache Kafka client for node.js

85 lines (78 loc) 2.4 kB
const Encoder = require('../../../encoder') const { Fetch: apiKey } = require('../../apiKeys') const ISOLATION_LEVEL = require('../../../isolationLevel') /** * Allow consumers to fetch from closest replica * @see https://cwiki.apache.org/confluence/display/KAFKA/KIP-392%3A+Allow+consumers+to+fetch+from+closest+replica */ /** * Fetch Request (Version: 11) => replica_id max_wait_time min_bytes max_bytes isolation_level session_id session_epoch [topics] [forgotten_topics_data] * replica_id => INT32 * max_wait_time => INT32 * min_bytes => INT32 * max_bytes => INT32 * isolation_level => INT8 * session_id => INT32 * session_epoch => INT32 * topics => topic [partitions] * topic => STRING * partitions => partition current_leader_epoch fetch_offset log_start_offset partition_max_bytes * partition => INT32 * current_leader_epoch => INT32 * fetch_offset => INT64 * log_start_offset => INT64 * partition_max_bytes => INT32 * forgotten_topics_data => topic [partitions] * topic => STRING * partitions => INT32 * rack_id => STRING */ module.exports = ({ replicaId, maxWaitTime, minBytes, maxBytes, topics, rackId = '', isolationLevel = ISOLATION_LEVEL.READ_COMMITTED, sessionId = 0, sessionEpoch = -1, forgottenTopics = [], // Topics to remove from the fetch session }) => ({ apiKey, apiVersion: 11, apiName: 'Fetch', encode: async () => { return new Encoder() .writeInt32(replicaId) .writeInt32(maxWaitTime) .writeInt32(minBytes) .writeInt32(maxBytes) .writeInt8(isolationLevel) .writeInt32(sessionId) .writeInt32(sessionEpoch) .writeArray(topics.map(encodeTopic)) .writeArray(forgottenTopics.map(encodeForgottenTopics)) .writeString(rackId) }, }) const encodeForgottenTopics = ({ topic, partitions }) => { return new Encoder().writeString(topic).writeArray(partitions) } const encodeTopic = ({ topic, partitions }) => { return new Encoder().writeString(topic).writeArray(partitions.map(encodePartition)) } const encodePartition = ({ partition, currentLeaderEpoch = -1, fetchOffset, logStartOffset = -1, maxBytes, }) => { return new Encoder() .writeInt32(partition) .writeInt32(currentLeaderEpoch) .writeInt64(fetchOffset) .writeInt64(logStartOffset) .writeInt32(maxBytes) }