我的流应用程序的行为与预期不符:
我有一个消费者和一个分区
我做了什么:
我的应用的行为:
这永远都不会发生,因为该组未提交消息“ asd”,所以永远不要消耗第二条消息
我与apache kafka的一些开发人员(通过电子邮件亲自联系)进行了交谈,他们明确表示,当Apache Kafka流使用一条引发异常的消息时,应重新使用它而不处理任何新消息
在我的情况下,预期的行为是在第2节中。应用程序应再次使用第一条消息(“ asd”)而不提交。
这是我的pom.xml:
<groupId>kafkaStreams</groupId>
<artifactId>streams</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-dependencies</artifactId>
<version>Elmhurst.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-kafka</artifactId>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
</dependencies>
我正在运行一个普通的spring stream应用程序。这是我的流实现:
@EnableBinding(TestStream.class)
public class TestHandler {
@StreamListener(value = TestStream.INPUT)
public void handle(@Payload TestContract contract) {
log.info("test kafka {}", contract);
}
}
TestStream.class:
public interface TestStream {
public String INPUT = "test-bind";
@Input(INPUT)
SubscribableChannel kakiChannel();
}
TestContract.class:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class TestContract {
private String string;
}
application.yml:
spring:
cloud:
stream:
kafka:
binder:
brokers: localhost:9092
bindings:
test-bind:
group: test-group
consumer:
startOffset: earliest
destination: test-topic
contentType: application/json