kafka-ts
Version:
**KafkaTS** is a Apache Kafka client library for Node.js. It provides both a low-level API for communicating directly with the Apache Kafka cluster and high-level APIs for publishing and subscribing to Kafka topics.
151 lines (148 loc) • 6.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OFFSET_FETCH = void 0;
const api_1 = require("../utils/api");
const error_1 = require("../utils/error");
/*
OffsetFetch Request (Version: 6) => group_id [topics] _tagged_fields
group_id => COMPACT_STRING
topics => name [partition_indexes] _tagged_fields
name => COMPACT_STRING
partition_indexes => INT32
OffsetFetch Response (Version: 6) => throttle_time_ms [topics] error_code _tagged_fields
throttle_time_ms => INT32
topics => name [partitions] _tagged_fields
name => COMPACT_STRING
partitions => partition_index committed_offset committed_leader_epoch metadata error_code _tagged_fields
partition_index => INT32
committed_offset => INT64
committed_leader_epoch => INT32
metadata => COMPACT_NULLABLE_STRING
error_code => INT16
error_code => INT16
*/
const OFFSET_FETCH_V6 = (0, api_1.createApi)({
apiKey: 9,
apiVersion: 6,
requestHeaderVersion: 2,
responseHeaderVersion: 1,
request: (encoder, data) => {
if (data.groups.length !== 1)
throw new Error('OffsetFetch v6 requires exactly 1 group');
const [group] = data.groups;
return encoder
.writeCompactString(group.groupId)
.writeCompactArray(group.topics, (encoder, topic) => encoder
.writeCompactString(topic.name)
.writeCompactArray(topic.partitionIndexes, (encoder, partitionIndex) => encoder.writeInt32(partitionIndex))
.writeTagBuffer())
.writeTagBuffer();
},
response: (decoder) => {
const result = {
throttleTimeMs: decoder.readInt32(),
groups: [
{
groupId: '',
topics: decoder.readCompactArray((decoder) => ({
name: decoder.readCompactString(),
partitions: decoder.readCompactArray((decoder) => ({
partitionIndex: decoder.readInt32(),
committedOffset: decoder.readInt64(),
committedLeaderEpoch: decoder.readInt32(),
committedMetadata: decoder.readCompactString(),
errorCode: decoder.readInt16(),
tags: decoder.readTagBuffer(),
})),
tags: decoder.readTagBuffer(),
})),
errorCode: decoder.readInt16(),
tags: {},
},
],
tags: decoder.readTagBuffer(),
};
if (result.groups[0].errorCode)
throw new error_1.KafkaTSApiError(result.groups[0].errorCode, null, result);
result.groups[0].topics.forEach((topic) => {
topic.partitions.forEach((partition) => {
if (partition.errorCode)
throw new error_1.KafkaTSApiError(partition.errorCode, null, result);
});
});
return result;
},
});
/*
OffsetFetch Request (Version: 8) => [groups] require_stable _tagged_fields
groups => group_id [topics] _tagged_fields
group_id => COMPACT_STRING
topics => name [partition_indexes] _tagged_fields
name => COMPACT_STRING
partition_indexes => INT32
require_stable => BOOLEAN
OffsetFetch Response (Version: 8) => throttle_time_ms [groups] _tagged_fields
throttle_time_ms => INT32
groups => group_id [topics] error_code _tagged_fields
group_id => COMPACT_STRING
topics => name [partitions] _tagged_fields
name => COMPACT_STRING
partitions => partition_index committed_offset committed_leader_epoch metadata error_code _tagged_fields
partition_index => INT32
committed_offset => INT64
committed_leader_epoch => INT32
metadata => COMPACT_NULLABLE_STRING
error_code => INT16
error_code => INT16
*/
exports.OFFSET_FETCH = (0, api_1.createApi)({
apiKey: 9,
apiVersion: 8,
fallback: OFFSET_FETCH_V6,
requestHeaderVersion: 2,
responseHeaderVersion: 1,
request: (encoder, data) => encoder
.writeCompactArray(data.groups, (encoder, group) => encoder
.writeCompactString(group.groupId)
.writeCompactArray(group.topics, (encoder, topic) => encoder
.writeCompactString(topic.name)
.writeCompactArray(topic.partitionIndexes, (encoder, partitionIndex) => encoder.writeInt32(partitionIndex))
.writeTagBuffer())
.writeTagBuffer())
.writeBoolean(data.requireStable)
.writeTagBuffer(),
response: (decoder) => {
const result = {
throttleTimeMs: decoder.readInt32(),
groups: decoder.readCompactArray((decoder) => ({
groupId: decoder.readCompactString(),
topics: decoder.readCompactArray((decoder) => ({
name: decoder.readCompactString(),
partitions: decoder.readCompactArray((decoder) => ({
partitionIndex: decoder.readInt32(),
committedOffset: decoder.readInt64(),
committedLeaderEpoch: decoder.readInt32(),
committedMetadata: decoder.readCompactString(),
errorCode: decoder.readInt16(),
tags: decoder.readTagBuffer(),
})),
tags: decoder.readTagBuffer(),
})),
errorCode: decoder.readInt16(),
tags: decoder.readTagBuffer(),
})),
tags: decoder.readTagBuffer(),
};
result.groups.forEach((group) => {
if (group.errorCode)
throw new error_1.KafkaTSApiError(group.errorCode, null, result);
group.topics.forEach((topic) => {
topic.partitions.forEach((partition) => {
if (partition.errorCode)
throw new error_1.KafkaTSApiError(partition.errorCode, null, result);
});
});
});
return result;
},
});