我们是否可以让多个消费者从主题中消费以在kafka中实现并行处理。 我的用例是并行读取单个分区的消息。
答案 0 :(得分:0)
简单地说,默认情况下,我们无法为消费者实现分区级并行。
但你可以试试Akka Streams Kafka (Reactive kafka)。一旦通过这些文档。
答案 1 :(得分:0)
分区数定义了从kafka主题中读取的并行度。但阅读(或多或少)仅受网络容量的限制。
一个好的模式是分离消息的读取和处理(每个主题分区一个线程用于读取,多个线程用于处理此消息)。
答案 2 :(得分:0)
是的,您可以使用多个 Kafka 消费者并行处理消息,但是不行,如果您只有一个分区,这是不可能的。
Kafka 消费中的并行性是由分区数量定义的,您可以随时轻松地重新分区您的主题以创建更多分区。
下面是如何使用 rapids-kafka-client 并行处理消息的示例,这是一个使 Kafka 并行消费更容易的库。
public static void main(String[] args){
ConsumerConfig.<String, String>builder()
.prop(KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName())
.prop(VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName())
.prop(GROUP_ID_CONFIG, "stocks")
.topics("stock_changed")
.consumers(7)
.callback((ctx, record) -> {
System.out.printf("status=consumed, value=%s%n", record.value());
})
.build()
.consume()
.waitFor();
}