想知道是否可以并行地读取和处理Kafka使用者(Java客户端)的多条消息。我的意思是使用多个线程......我应该使用rxJava吗?
1)这样做是否很好? 2)而且根据我的理解,卡夫卡甚至将每个线程视为消费者......如果我错了,请纠正我......
3)并且还希望将Java客户端作为守护进程服务在Linux中运行,以便它连续运行并轮询Kafka以获取消息,读取和处理相同的...这是一个很好的方法..
答案 0 :(得分:1)
Kafka支持按分区并行处理消息,您可以为一个kafka客户端启动多个消费者,一个或多个分区,而kafka也可以通过此模式支持同一分区中的序列处理。
当然,您可以启动多个线程来处理一个消费者中的多个消息,但无法确保一个分区中的序列处理。
答案 1 :(得分:0)
好的,这里有很多问题
<块引用>想知道是否可以通过 Kafka 消费者(Java 客户端)并行读取和处理多条消息
用于 Java 的 kafka 客户端仅支持串行处理,您可以通过创建多个线程和每个线程一个使用者,将 kafka 使用者并行化到您的主题拥有的 partitions 数量,尽管线程很棘手,但我建议你使用一些库来实现这一点,例如rapids-kafka-client。
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();
}
<块引用>
是的,没问题,创建分区是为了使并行成为可能
<块引用>在 Kafka vanilla 客户端库上,消费者是一个能够从一个主题的一个或多个分区下载消息的类,该客户端本身不支持多个线程,您可以创建多个线程或使用一些库(例如 Rapids- kafka-client) 用于此目的,因此您可以为不同的主题分区创建多个使用者,然后并行使用。
<块引用>是的,使用库,编写代码,发布 jar,运行它并让它继续处理数据