Spring Kafka流跳过消息

时间:2018-09-13 12:22:05

标签: java apache-kafka apache-kafka-streams

我的流应用程序的行为与预期不符:

我有一个消费者和一个分区

我做了什么:

  1. 发送无效消息“ asd”
  2. 发送有效消息“ {}”

我的应用的行为:

  1. 抛出异常,我的团队滞后1
  2. 使用消息并提交。滞后0

这永远都不会发生,因为该组未提交消息“ 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

0 个答案:

没有答案