我是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版本吗?
答案 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
不支持。