在春季启动时通过Kafka消费批次

时间:2020-07-08 12:25:44

标签: java spring-boot maven apache-kafka spring-cloud-stream

我是Kafka的新手,想通过消费者批量处理。

通读documentation,发现从3.0版开始,我们可以启用批处理。

当前,我们正在使用Spring Boot 2.1.3.RELEASE以及以下对kafka的依赖项:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Greenwich.SR3</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-stream</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-stream-binder-kafka</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka</artifactId>
    </dependency>

在启动属性和代码更改之前,我需要在pom.xml中进行哪些更改?我需要更改Springboot版本吗?

2 个答案:

答案 0 :(得分:2)

您可以使用@StreamListener批量使用它。您只需要提供一个反序列化器即可。例子:

您只需要提供一个反序列化器即可。

public class Person {

    private String name;
    private String surname;
    .........
}


   @StreamListener(value = PersonStream.INPUT)
    private void personBulkReceiver(List<Person> person) {
        System.out.println("personBulkReceiver : " + person.size());
    }


spring:
  cloud:
    stream:
      kafka:
      binders:
        bulkKafka:
          type: kafka
          environment:
            spring:
              cloud:
                stream:
                  kafka:
                    binder:
                      brokers: localhost:9092
                      configuration:
                        max.poll.records: 1500
                        fetch.min.bytes: 1000000
                        fetch.max.wait.ms: 10000
                        value.deserializer: tr.cloud.stream.examples.PersonDeserializer
      bindings:
        person-topic-in:
          binder: bulkKafka
          destination: person-topic
          contentType: application/person
          group : omercelik
          consumer:
            batch-mode: true

public class PersonDeserializer extends JsonDeserializer<Person> {
}

答案 1 :(得分:1)

您需要Boot 2.3.1和Cloud Hoxton.SR6。

仅功能性编程样式支持批处理模式,@StreamListtener不支持。