Sr. Director, Developer Advocacy (Presenter)
Using the consumer API is similar in principle to the producer. You use a class called KafkaConsumer
to connect to the cluster (passing a configuration map to specify the address of the cluster, security, and other parameters). Then you use that connection to subscribe to one or more topics. When messages are available on those topics, they come back in a collection called ConsumerRecords
, which contains individual instances of messages in the form of ConsumerRecord
objects. A ConsumerRecord
object represents the key/value pair of a single Apache Kafka message.
try (final KafkaConsumer<String, Payment> consumer = new KafkaConsumer<>(props))
{consumer.subscribe(Collections.singletonList(TOPIC));
while (true) {
ConsumerRecords<String, Payment> records = consumer.poll(100);
for (ConsumerRecord<String, Payment> record : records) {
String key = record.key();
Payment value = record.value();
System.out.printf("key = %s, value = %s%n", key, value);
}
}
}
KafkaConsumer
manages connection pooling and the network protocol just like KafkaProducer
does, but there is a much bigger story on the read side than just the network plumbing. First of all, Kafka is different from legacy message queues in that reading a message does not destroy it; it is still there to be read by any other consumer that might be interested in it. In fact, it’s perfectly normal in Kafka for many consumers to read from one topic. This one small fact has a positively disproportionate impact on the kinds of software architectures that emerge around Kafka, which is a topic covered very well elsewhere.
Also, consumers need to be able to handle the scenario in which the rate of message consumption from a topic combined with the computational cost of processing a single message are together too high for a single instance of the application to keep up. That is, consumers need to scale. In Kafka, scaling consumer groups is more or less automatic.
We will only share developer content and updates, including notifications when new content is added. We will never send you sales emails. 🙂 By subscribing, you understand we will process your personal information in accordance with our Privacy Statement.