Apache kafka 如何在应用程序属性中包含多个kafka使用者组

Apache kafka 如何在应用程序属性中包含多个kafka使用者组,apache-kafka,spring-kafka,Apache Kafka,Spring Kafka,我正在使用spring kafka,希望在应用程序yaml中提到多个消费者GroupID,我可以在kafkaListener类中使用这些ID,我正在听多个主题 application.yml文件中的kafka属性现在看起来像这样 kafka: properties: topics: topic1: topic1 topic2: topic2 bootstrap-servers: server1,server2 producer:

我正在使用spring kafka,希望在应用程序yaml中提到多个消费者GroupID,我可以在kafkaListener类中使用这些ID,我正在听多个主题

application.yml文件中的kafka属性现在看起来像这样

kafka:
    properties:
      topics:
        topic1: topic1
        topic2: topic2
    bootstrap-servers: server1,server2
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
      retries: 4
    consumer:
      group-id: mygroupid
      auto-offset-reset: latest
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
是否有一种方法可以在上面的consumer块中拥有多个GroupID

或者,在我的spring代码中,我在kafkaListener中给出了不同的GroupID,如下所示,我不确定如何设置其他属性,如自动偏移重置、键反序列化器等:

 @KafkaListener(topics = "topic1",  groupId = "cd1")
  public void consumeMessage(String message) throws Exception {
    // some code goes here
  }

请让我知道如何完成我正在尝试做的事情,因为我是卡夫卡新手。

仅引导自动配置一个来自yml的
DefaultKafkanConsumerFactory
DefaultKafkanConsumerFactory
,因此所有属性都在所有消费者之间共享。这就是为什么我们添加了
groupId
(如果未提供
groupId
,则使用
id
);这是消费者之间变化的最常见属性

当然,您可以使用属性占位符,这样
groupId=“${group.one}”
将使用yml中的属性
group.one

要更改更基本的内容(如序列化器/反序列化器),如果您使用的版本早于2.2.4,则需要创建多个工厂和容器工厂

但是,从2.2.4版开始,您现在可以在
KafkaListener
注释中设置任意卡夫卡使用者属性

/**
 * Kafka consumer properties; they will supersede any properties with the same name
 * defined in the consumer factory (if the consumer factory supports property overrides).
 * <h3>Supported Syntax</h3>
 * <p>The supported syntax for key-value pairs is the same as the
 * syntax defined for entries in a Java
 * {@linkplain java.util.Properties#load(java.io.Reader) properties file}:
 * <ul>
 * <li>{@code key=value}</li>
 * <li>{@code key:value}</li>
 * <li>{@code key value}</li>
 * </ul>
 * {@code group.id} and {@code client.id} are ignored.
 * @return the properties.
 * @since 2.2.4
 * @see org.apache.kafka.clients.consumer.ConsumerConfig
 * @see #groupId()
 * @see #clientIdPrefix()
 */
String[] properties() default {};
同样,这些值可以是属性占位符

在生产者方面,你仍然需要多个工厂

@KafkaListener(topics = "myTopic", groupId="group", properties= {
    "max.poll.interval.ms:60000",
    ConsumerConfig.MAX_POLL_RECORDS_CONFIG + "=100"
})