Java 如何使用Quarkus在卡夫卡的同一主题中设置多个使用者
我正在使用Quarkus框架构建一个Kafka使用者,它将阅读一个包含3个分区的主题。下面的代码片段正在运行,但根据日志,我只是启动了一个消费者,其中有3个分区。我现在的问题是,在运行应用程序后,如何生成3个消费者Java 如何使用Quarkus在卡夫卡的同一主题中设置多个使用者,java,apache-kafka,reactive-programming,kafka-consumer-api,quarkus,Java,Apache Kafka,Reactive Programming,Kafka Consumer Api,Quarkus,我正在使用Quarkus框架构建一个Kafka使用者,它将阅读一个包含3个分区的主题。下面的代码片段正在运行,但根据日志,我只是启动了一个消费者,其中有3个分区。我现在的问题是,在运行应用程序后,如何生成3个消费者 @Incoming("topic-1") public CompletionStage<Void> onMessage(KafkaRecord<String, String> message) throws IOException { LOG.inf
@Incoming("topic-1")
public CompletionStage<Void> onMessage(KafkaRecord<String, String> message) throws IOException {
LOG.info("Kafka order message with value = {} arrived from topic {} ", message.getPayload(),
message.getTopic());
//JsonObject event = new JsonObject(message.getPayload());
try {
if (true) {
LOG.info("Kafka message: " + message);
}
} catch (Exception e) {
e.printStackTrace();
}
return message.ack();
}
@传入(“主题1”)
public CompletionStage onMessage(KafkaRecord消息)引发IOException{
LOG.info(“值为{}的Kafka订单消息从主题{}到达”,message.getPayload(),
message.getTopic());
//JsonObject事件=新的JsonObject(message.getPayload());
试一试{
如果(真){
LOG.info(“卡夫卡消息:”+消息);
}
}捕获(例外e){
e、 printStackTrace();
}
返回message.ack();
}
请参阅示例日志:
信息[org.apa.kaf.cli.con.int.ConsumerCoordinator](vert.x-kafka-consumer-thread-0)[consumer clientId=testconsumer,groupId=kafka detection consumer]在第64代完成了组的分配:{testconsumer-bf6d314c-44e1-47b1-9439-fe4058951841=分配(分区=[test_part-0,test_part-1,test_part-2])
如果您在containers平台(Docker,K8S…)上运行应用程序,那么您可以水平扩展您的服务;否则,请使用不同的端口再次运行应用程序
当Kafka客户端启动时,它将被分配到某个分区,因此同一个客户端不能使用多个主题分区。如果您在containers平台(Docker,K8S…)上运行应用程序,那么您可以水平扩展服务;否则,请使用不同的端口再次运行应用程序
当Kafka客户端启动时,它将被分配到某个分区,因此,同一个客户端不能从多个主题分区消费。这可能是一个选项,但我希望在服务中增加线程或其他选项,我可以在服务中编写代码。我没有尝试过,但可能您可以配置指向同一Kafka主题的其他频道名称,并创建两个方法,使用相同的代码但不同的频道名称,我相信这应该可以。谢谢!这是我的最后一个选项,但它会有一个脏代码-我正在寻找动态配置,并将根据该配置生成线程/使用者。还要确保所有使用者使用相同的consumer-group-id。这可能是一个选项,但我希望在服务中增加可能的线程或其他选项,我可以在服务。我没有尝试过,但也许你可以配置另一个指向同一卡夫卡主题的频道名称,并创建两个具有相同代码但不同频道名称的方法,我相信这应该可以。谢谢!这是我的最后一个选项,但它会有一个脏代码-我正在寻找动态配置,并将基于该配置生成线程/使用者。还要确保所有使用者使用相同的consumer-group-id。