Package com.networknt.kafka.consumer
Class KafkaConsumerManager
- java.lang.Object
-
- com.networknt.kafka.consumer.KafkaConsumerManager
-
public class KafkaConsumerManager extends Object
Manages consumer instances by mapping instance IDs to consumer objects, processing read requests, and cleaning up when consumers disappear.For read and commitOffsets tasks, it uses a
ThreadPoolExecutorwhich spins up threads for handling read tasks. Since read tasks do not complete on the first run but rather call the AK consumer's poll() method continuously, we re-schedule them via aDelayQueue. AKafkaConsumerManager.ReadTaskSchedulerThreadruns in a separate thread and re-submits the tasks to the executor.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceKafkaConsumerManager.CommitCallbackstatic interfaceKafkaConsumerManager.KafkaConsumerFactory
-
Field Summary
Fields Modifier and Type Field Description static com.networknt.client.Http2Clientclientstatic io.undertow.client.ClientConnectionconnection
-
Constructor Summary
Constructors Constructor Description KafkaConsumerManager(KafkaConsumerConfig config)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidassign(String group, String instance, ConsumerAssignmentRequest assignmentRequest)ConsumerAssignmentResponseassignment(String group, String instance)List<TopicPartitionOffset>commitCurrentOffsets(String group, String instance)FuturecommitOffsets(String group, String instance, boolean async, ConsumerOffsetCommitRequest offsetCommitRequest, KafkaConsumerManager.CommitCallback callback)ConsumerCommittedResponsecommitted(String group, String instance, ConsumerCommittedRequest request)StringcreateConsumer(String group, ConsumerInstanceConfig instanceConfig)Creates a new consumer instance and returns its unique ID.voiddeleteConsumer(String group, String instance)longgetBeginningOffset(String topic, int partition)Returns the beginning offset of thetopicpartition.io.undertow.client.ClientConnectiongetConnection()longgetEndOffset(String topic, int partition)Returns the end offset of thetopicpartition.KafkaConsumerState<?,?,?,?>getExistingConsumerInstance(String group, String instance)Optional<Long>getOffsetForTime(String topic, int partition, Instant timestamp)Returns the earliest offset whose timestamp is greater than or equal to the giventimestampin thetopicpartition, or empty if such offset does not exist.org.apache.kafka.common.header.HeaderspopulateHeaders(RecordProcessedResult recordProcessedResult)<KafkaKeyT,KafkaValueT,ClientKeyT,ClientValueT>
voidreadRecords(String group, String instance, Class<? extends KafkaConsumerState> consumerStateType, Duration timeout, long maxBytes, ConsumerReadCallback<ClientKeyT,ClientValueT> callback)<ClientValueT,ClientKeyT>
voidrollback(List<ConsumerRecord<ClientKeyT,ClientValueT>> records, String groupId, String instanceId)voidrollbackExchangeDefinition(io.undertow.server.HttpServerExchange exchange, String groupId, String instanceId, List<String> topics, List<ConsumerRecord<Object,Object>> records)voidseek(String group, String instance, ConsumerSeekRequest request)<ClientValueT,ClientKeyT>
List<ConsumerSeekRequest.PartitionOffset>seekOffsetListUtility(List<ConsumerRecord<ClientKeyT,ClientValueT>> records)voidseekToBeginning(String group, String instance, ConsumerSeekToRequest seekToRequest)voidseekToEnd(String group, String instance, ConsumerSeekToRequest seekToRequest)<ClientValueT,ClientKeyT>
voidseekToParticularOffset(List<ConsumerRecord<ClientKeyT,ClientValueT>> records, String groupId, String instanceId)voidshutdown()voidsubscribe(String group, String instance, ConsumerSubscriptionRecord subscription)ConsumerSubscriptionResponsesubscription(String group, String instance)voidsuccessExchangeDefinition(io.undertow.server.HttpServerExchange exchange, String groupId, String instanceId, List<String> topics, List<ConsumerRecord<Object,Object>> records)voidunsubscribe(String group, String instance)
-
-
-
Constructor Detail
-
KafkaConsumerManager
public KafkaConsumerManager(KafkaConsumerConfig config)
-
-
Method Detail
-
createConsumer
public String createConsumer(String group, ConsumerInstanceConfig instanceConfig)
Creates a new consumer instance and returns its unique ID.- Parameters:
group- Name of the consumer group to joininstanceConfig- configuration parameters for the consumer- Returns:
- Unique consumer instance ID
-
readRecords
public <KafkaKeyT,KafkaValueT,ClientKeyT,ClientValueT> void readRecords(String group, String instance, Class<? extends KafkaConsumerState> consumerStateType, Duration timeout, long maxBytes, ConsumerReadCallback<ClientKeyT,ClientValueT> callback)
-
commitCurrentOffsets
public List<TopicPartitionOffset> commitCurrentOffsets(String group, String instance) throws com.networknt.exception.FrameworkException
- Throws:
com.networknt.exception.FrameworkException
-
commitOffsets
public Future commitOffsets(String group, String instance, boolean async, ConsumerOffsetCommitRequest offsetCommitRequest, KafkaConsumerManager.CommitCallback callback)
-
committed
public ConsumerCommittedResponse committed(String group, String instance, ConsumerCommittedRequest request)
-
getBeginningOffset
public long getBeginningOffset(String topic, int partition)
Returns the beginning offset of thetopicpartition.- Parameters:
topic- the topicpartition- the partition- Returns:
- the beginning offset
-
getEndOffset
public long getEndOffset(String topic, int partition)
Returns the end offset of thetopicpartition.- Parameters:
topic- the topicpartition- the partition- Returns:
- the offset
-
getOffsetForTime
public Optional<Long> getOffsetForTime(String topic, int partition, Instant timestamp)
Returns the earliest offset whose timestamp is greater than or equal to the giventimestampin thetopicpartition, or empty if such offset does not exist.- Parameters:
topic- the topicpartition- the partitiontimestamp- the timestamp- Returns:
- offset for timestamp
-
subscribe
public void subscribe(String group, String instance, ConsumerSubscriptionRecord subscription)
-
subscription
public ConsumerSubscriptionResponse subscription(String group, String instance)
-
seekToBeginning
public void seekToBeginning(String group, String instance, ConsumerSeekToRequest seekToRequest)
-
seekToEnd
public void seekToEnd(String group, String instance, ConsumerSeekToRequest seekToRequest)
-
seek
public void seek(String group, String instance, ConsumerSeekRequest request)
-
assign
public void assign(String group, String instance, ConsumerAssignmentRequest assignmentRequest)
-
assignment
public ConsumerAssignmentResponse assignment(String group, String instance)
-
shutdown
public void shutdown()
-
getExistingConsumerInstance
public KafkaConsumerState<?,?,?,?> getExistingConsumerInstance(String group, String instance)
-
rollback
public <ClientValueT,ClientKeyT> void rollback(List<ConsumerRecord<ClientKeyT,ClientValueT>> records, String groupId, String instanceId)
-
seekToParticularOffset
public <ClientValueT,ClientKeyT> void seekToParticularOffset(List<ConsumerRecord<ClientKeyT,ClientValueT>> records, String groupId, String instanceId)
-
seekOffsetListUtility
public <ClientValueT,ClientKeyT> List<ConsumerSeekRequest.PartitionOffset> seekOffsetListUtility(List<ConsumerRecord<ClientKeyT,ClientValueT>> records)
-
populateHeaders
public org.apache.kafka.common.header.Headers populateHeaders(RecordProcessedResult recordProcessedResult)
-
rollbackExchangeDefinition
public void rollbackExchangeDefinition(io.undertow.server.HttpServerExchange exchange, String groupId, String instanceId, List<String> topics, List<ConsumerRecord<Object,Object>> records)
-
successExchangeDefinition
public void successExchangeDefinition(io.undertow.server.HttpServerExchange exchange, String groupId, String instanceId, List<String> topics, List<ConsumerRecord<Object,Object>> records)
-
getConnection
public io.undertow.client.ClientConnection getConnection()
-
-