Package com.github.ddth.queue.impl
Class KafkaQueue<ID,DATA>
- java.lang.Object
-
- com.github.ddth.queue.impl.AbstractQueue<ID,DATA>
-
- com.github.ddth.queue.impl.KafkaQueue<ID,DATA>
-
- All Implemented Interfaces:
IQueue<ID,DATA>,AutoCloseable
- Direct Known Subclasses:
BaseUniversalKafkaQueue
public abstract class KafkaQueue<ID,DATA> extends AbstractQueue<ID,DATA>
(Experimental) Kafka implementation ofIQueue.- Queue-size support: no
- Ephemeral storage support: no
- Since:
- 0.3.2
- Author:
- Thanh Ba Nguyen
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class com.github.ddth.queue.impl.AbstractQueue
AbstractQueue.PutToQueueCase
-
-
Field Summary
Fields Modifier and Type Field Description static StringDEFAULT_BOOTSTRAP_SERVERSstatic StringDEFAULT_CONSUMER_GROUP_IDstatic com.github.ddth.kafka.KafkaClient.ProducerTypeDEFAULT_PRODUCER_TYPEstatic booleanDEFAULT_SEND_ASYNCstatic StringDEFAULT_TOPIC_NAME-
Fields inherited from interface com.github.ddth.queue.IQueue
SIZE_NOT_SUPPORTED
-
-
Constructor Summary
Constructors Constructor Description KafkaQueue()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected com.github.ddth.kafka.KafkaClientbuildKafkaClient()voiddestroy()Destroy method.protected booleandoPutToQueue(IQueueMessage<ID,DATA> msg, AbstractQueue.PutToQueueCase queueCase)Put a message to the queue storage.intephemeralSize()Get number of items currently in ephemeral storage.voidfinish(IQueueMessage<ID,DATA> msg)Called when finish processing the message to cleanup ephemeral storage.StringgetConsumerGroupId()Kafka group-id to consume messages.StringgetKafkaBootstrapServers()Kafka bootstrap server list (formathost1:9092,host2:port2,host3:port3).protected com.github.ddth.kafka.KafkaClientgetKafkaClient()An externalKafkaClientcan be used.PropertiesgetKafkaConsumerProperties()Custom configuration properties for Kafka consumer.PropertiesgetKafkaProducerProperties()Custom configuration properties for Kafka producer.Collection<IQueueMessage<ID,DATA>>getOrphanMessages(long thresholdTimestampMs)Get all orphan messages (messages that were left in ephemeral storage for a long time).com.github.ddth.kafka.KafkaClient.ProducerTypegetProducerType()Kafka's producer type, used to send messages (defaultKafkaClient.ProducerType.LEADER_ACK).StringgetTopicName()Name of Kafka topic to store queue messages.KafkaQueue<ID,DATA>init()Init method.booleanisSendAsync()Should messages sent to Kafka asynchronously (defaulttrue)?intqueueSize()Get number of items currently in queue storage.KafkaQueue<ID,DATA>setConsumerGroupId(String consumerGroupId)Kafka group-id to consume messages.KafkaQueue<ID,DATA>setKafkaBootstrapServers(String kafkaBootstrapServers)Kafka bootstrap server list (formathost1:9092,host2:port2,host3:port3).KafkaQueue<ID,DATA>setKafkaClient(com.github.ddth.kafka.KafkaClient kafkaClient)An externalKafkaClientcan be used.protected KafkaQueue<ID,DATA>setKafkaClient(com.github.ddth.kafka.KafkaClient kafkaClient, boolean setMyOwnKafkaClient)An externalKafkaClientcan be used.KafkaQueue<ID,DATA>setKafkaConsumerProperties(Properties kafkaConsumerConfigs)Custom configuration properties for Kafka consumer.KafkaQueue<ID,DATA>setKafkaProducerProperties(Properties kafkaProducerConfigs)Custom configuration properties for Kafka producer.KafkaQueue<ID,DATA>setProducerType(com.github.ddth.kafka.KafkaClient.ProducerType producerType)Kafka's producer type, used to send messages (defaultKafkaClient.ProducerType.LEADER_ACK).KafkaQueue<ID,DATA>setSendAsync(boolean value)Should messages sent to Kafka asynchronously (defaulttrue)?KafkaQueue<ID,DATA>setTopicName(String topicName)Name of Kafka topic to store queue messages.IQueueMessage<ID,DATA>take()Take a message out of queue.protected IQueueMessage<ID,DATA>takeFromQueue()Take a message from Kafka queue.-
Methods inherited from class com.github.ddth.queue.impl.AbstractQueue
close, createMessage, createMessage, createMessage, deserialize, deserialize, getMessageFactory, getQueueName, getSerDeser, queue, requeue, requeueSilent, serialize, setMessageFactory, setQueueName, setSerDeser
-
-
-
-
Field Detail
-
DEFAULT_BOOTSTRAP_SERVERS
public static final String DEFAULT_BOOTSTRAP_SERVERS
- See Also:
- Constant Field Values
-
DEFAULT_TOPIC_NAME
public static final String DEFAULT_TOPIC_NAME
- See Also:
- Constant Field Values
-
DEFAULT_PRODUCER_TYPE
public static final com.github.ddth.kafka.KafkaClient.ProducerType DEFAULT_PRODUCER_TYPE
-
DEFAULT_SEND_ASYNC
public static final boolean DEFAULT_SEND_ASYNC
- See Also:
- Constant Field Values
-
DEFAULT_CONSUMER_GROUP_ID
public static final String DEFAULT_CONSUMER_GROUP_ID
- See Also:
- Constant Field Values
-
-
Method Detail
-
isSendAsync
public boolean isSendAsync()
Should messages sent to Kafka asynchronously (defaulttrue)?- Returns:
- Since:
- 0.5.0
-
setSendAsync
public KafkaQueue<ID,DATA> setSendAsync(boolean value)
Should messages sent to Kafka asynchronously (defaulttrue)?- Parameters:
value-- Returns:
-
getProducerType
public com.github.ddth.kafka.KafkaClient.ProducerType getProducerType()
Kafka's producer type, used to send messages (defaultKafkaClient.ProducerType.LEADER_ACK).- Returns:
-
setProducerType
public KafkaQueue<ID,DATA> setProducerType(com.github.ddth.kafka.KafkaClient.ProducerType producerType)
Kafka's producer type, used to send messages (defaultKafkaClient.ProducerType.LEADER_ACK).- Parameters:
producerType-- Returns:
-
getKafkaBootstrapServers
public String getKafkaBootstrapServers()
Kafka bootstrap server list (formathost1:9092,host2:port2,host3:port3).- Returns:
- Since:
- 0.4.0
-
setKafkaBootstrapServers
public KafkaQueue<ID,DATA> setKafkaBootstrapServers(String kafkaBootstrapServers)
Kafka bootstrap server list (formathost1:9092,host2:port2,host3:port3).- Parameters:
kafkaBootstrapServers-- Returns:
- Since:
- 0.4.0
-
getKafkaProducerProperties
public Properties getKafkaProducerProperties()
Custom configuration properties for Kafka producer.- Returns:
- Since:
- 0.4.0
-
setKafkaProducerProperties
public KafkaQueue<ID,DATA> setKafkaProducerProperties(Properties kafkaProducerConfigs)
Custom configuration properties for Kafka producer.- Parameters:
kafkaProducerConfigs-- Returns:
- Since:
- 0.4.0
-
getKafkaConsumerProperties
public Properties getKafkaConsumerProperties()
Custom configuration properties for Kafka consumer.- Returns:
- Since:
- 0.4.0
-
setKafkaConsumerProperties
public KafkaQueue<ID,DATA> setKafkaConsumerProperties(Properties kafkaConsumerConfigs)
Custom configuration properties for Kafka consumer.- Parameters:
kafkaConsumerConfigs-- Returns:
- Since:
- 0.4.0
-
getTopicName
public String getTopicName()
Name of Kafka topic to store queue messages.- Returns:
-
setTopicName
public KafkaQueue<ID,DATA> setTopicName(String topicName)
Name of Kafka topic to store queue messages.- Parameters:
topicName-- Returns:
-
getConsumerGroupId
public String getConsumerGroupId()
Kafka group-id to consume messages.- Returns:
-
setConsumerGroupId
public KafkaQueue<ID,DATA> setConsumerGroupId(String consumerGroupId)
Kafka group-id to consume messages.- Parameters:
consumerGroupId-- Returns:
-
getKafkaClient
protected com.github.ddth.kafka.KafkaClient getKafkaClient()
An externalKafkaClientcan be used. If not set,KafkaQueuewill automatically create aKafkaClientfor its own use.- Returns:
-
setKafkaClient
protected KafkaQueue<ID,DATA> setKafkaClient(com.github.ddth.kafka.KafkaClient kafkaClient, boolean setMyOwnKafkaClient)
An externalKafkaClientcan be used. If not set,KafkaQueuewill automatically create aKafkaClientfor its own use.- Parameters:
kafkaClient-setMyOwnKafkaClient-- Returns:
-
setKafkaClient
public KafkaQueue<ID,DATA> setKafkaClient(com.github.ddth.kafka.KafkaClient kafkaClient)
An externalKafkaClientcan be used. If not set,KafkaQueuewill automatically create aKafkaClientfor its own use.- Parameters:
kafkaClient-- Returns:
-
buildKafkaClient
protected com.github.ddth.kafka.KafkaClient buildKafkaClient()
-
init
public KafkaQueue<ID,DATA> init() throws Exception
Init method.- Overrides:
initin classAbstractQueue<ID,DATA>- Returns:
- Throws:
Exception
-
destroy
public void destroy()
Destroy method.- Overrides:
destroyin classAbstractQueue<ID,DATA>
-
takeFromQueue
protected IQueueMessage<ID,DATA> takeFromQueue()
Take a message from Kafka queue.- Returns:
- Since:
- 0.3.3
-
doPutToQueue
protected boolean doPutToQueue(IQueueMessage<ID,DATA> msg, AbstractQueue.PutToQueueCase queueCase)
Put a message to the queue storage.Sub-class implements this method.
queueCaseis ignore as we always add new message to Kafka.- Specified by:
doPutToQueuein classAbstractQueue<ID,DATA>- Returns:
-
finish
public void finish(IQueueMessage<ID,DATA> msg)
Called when finish processing the message to cleanup ephemeral storage.Implementation flow:
- Remove message from ephemeral storage.
Note: ephemeral storage implementation is optional, depends on implementation.
-
take
public IQueueMessage<ID,DATA> take()
Take a message out of queue.Implementation flow:
- Read message from head of queue storage.
- Write message to ephemeral storage.
- Remove message from queue storage.
Note: ephemeral storage implementation is optional, depends on implementation.
- Returns:
-
getOrphanMessages
public Collection<IQueueMessage<ID,DATA>> getOrphanMessages(long thresholdTimestampMs)
Get all orphan messages (messages that were left in ephemeral storage for a long time).This method throws
QueueException.OperationNotSupported- Parameters:
thresholdTimestampMs- message is orphan ifmessage's timestampMillis + thresholdTimestampMs < now. Which meansgetOrphanMessages(10000)will return orphan messages that have stayed in ephemeral storage for more than 10000 milliseconds.- Returns:
nullor empty collection if there is no orphan message
-
queueSize
public int queueSize()
Get number of items currently in queue storage.- Returns:
- negative number if queue size can not be queried
-
ephemeralSize
public int ephemeralSize()
Get number of items currently in ephemeral storage.Note: ephemeral storage implementation is optional, depends on implementation.
- Returns:
- negative number if ephemeral size can not be queried
-
-