@platformatic/kafka
Version:
Modern and performant client for Apache Kafka
101 lines (100 loc) • 4.4 kB
TypeScript
import { type FetchRequestTopic } from '../../apis/consumer/fetch-v17.ts';
import { type FetchIsolationLevel, type GroupProtocols } from '../../apis/enumerations.ts';
import { type KafkaRecord, type Message } from '../../protocol/records.ts';
import { type BaseOptions, type ClusterMetadata, type TopicWithPartitionAndOffset } from '../base/types.ts';
import { type Deserializers } from '../serde.ts';
export interface GroupProtocolSubscription {
name: string;
version: number;
metadata?: Buffer | string;
}
export interface GroupAssignment {
topic: string;
partitions: number[];
}
export interface GroupPartitionsAssignments {
memberId: string;
assignments: Map<string, GroupAssignment>;
}
export interface ExtendedGroupProtocolSubscription extends Omit<GroupProtocolSubscription, 'name'> {
topics?: string[];
memberId: string;
}
export type Offsets = Map<string, bigint[]>;
export type OffsetsWithTimestamps = Map<string, Map<number, {
offset: bigint;
timestamp: bigint;
}>>;
export type CorruptedMessageHandler = (record: KafkaRecord, topic: string, partition: number, firstTimestamp: bigint, firstOffset: bigint, commit: Message['commit']) => boolean;
export type GroupPartitionsAssigner = (current: string, members: Map<string, ExtendedGroupProtocolSubscription>, topics: Set<string>, metadata: ClusterMetadata) => GroupPartitionsAssignments[];
export declare const MessagesStreamModes: {
readonly LATEST: "latest";
readonly EARLIEST: "earliest";
readonly COMMITTED: "committed";
readonly MANUAL: "manual";
};
export declare const allowedMessagesStreamModes: MessagesStreamModeValue[];
export type MessagesStreamMode = keyof typeof MessagesStreamModes;
export type MessagesStreamModeValue = (typeof MessagesStreamModes)[keyof typeof MessagesStreamModes];
export declare const MessagesStreamFallbackModes: {
readonly LATEST: "latest";
readonly EARLIEST: "earliest";
readonly FAIL: "fail";
};
export declare const allowedMessagesStreamFallbackModes: MessagesStreamFallbackModeValue[];
export type MessagesStreamFallbackMode = keyof typeof MessagesStreamFallbackModes;
export type MessagesStreamFallbackModeValue = (typeof MessagesStreamFallbackModes)[keyof typeof MessagesStreamFallbackModes];
export interface GroupOptions {
groupProtocol?: typeof GroupProtocols.CLASSIC;
sessionTimeout?: number;
rebalanceTimeout?: number;
heartbeatInterval?: number;
protocols?: GroupProtocolSubscription[];
partitionAssigner?: GroupPartitionsAssigner;
}
export interface ConsumerGroupOptions {
groupProtocol: typeof GroupProtocols.CONSUMER;
groupRemoteAssignor?: string;
rebalanceTimeout?: number;
}
export interface ConsumeBaseOptions<Key, Value, HeaderKey, HeaderValue> {
autocommit?: boolean | number;
minBytes?: number;
maxBytes?: number;
maxWaitTime?: number;
isolationLevel?: FetchIsolationLevel;
deserializers?: Partial<Deserializers<Key, Value, HeaderKey, HeaderValue>>;
highWaterMark?: number;
}
export interface StreamOptions {
topics: string[];
mode?: MessagesStreamModeValue;
fallbackMode?: MessagesStreamFallbackModeValue;
maxFetches?: number;
offsets?: TopicWithPartitionAndOffset[];
onCorruptedMessage?: CorruptedMessageHandler;
}
export type ConsumeOptions<Key, Value, HeaderKey, HeaderValue> = StreamOptions & ConsumeBaseOptions<Key, Value, HeaderKey, HeaderValue> & GroupOptions;
export type ConsumerOptions<Key, Value, HeaderKey, HeaderValue> = BaseOptions & {
groupId: string;
} & (GroupOptions | ConsumerGroupOptions) & ConsumeBaseOptions<Key, Value, HeaderKey, HeaderValue>;
export type FetchOptions<Key, Value, HeaderKey, HeaderValue> = Pick<ConsumeBaseOptions<Key, Value, HeaderKey, HeaderValue>, 'minBytes' | 'maxBytes' | 'maxWaitTime' | 'isolationLevel'> & {
node: number;
topics: FetchRequestTopic[];
};
export interface CommitOptionsPartition extends TopicWithPartitionAndOffset {
leaderEpoch: number;
}
export interface CommitOptions {
offsets: CommitOptionsPartition[];
}
export interface ListCommitsOptions {
topics: GroupAssignment[];
}
export interface ListOffsetsOptions {
topics: string[];
partitions?: Record<string, number[]>;
timestamp?: bigint;
isolationLevel?: FetchIsolationLevel;
}
export type GetLagOptions = Omit<ListOffsetsOptions, 'timestamp' | 'isolationLevel'>;