Java Kafka StreamsException TimeoutException:正在过期的N条记录正在物化KTable

Java Kafka StreamsException TimeoutException:正在过期的N条记录正在物化KTable,java,apache-kafka,apache-kafka-streams,Java,Apache Kafka,Apache Kafka Streams,我的streams应用程序只是从一个记录主题具体化一个KTable。主题中有10万条记录,没有问题。但是,主题中有1500万条记录,一旦我们在中获得数百万条记录,实例将崩溃,出现以下异常: 线程“companys-de1f21f9-b445-449e-a59b-5e0cecfa54d1-StreamThread-1”org.apache.kafka.streams.errors.StreamsException中的异常:任务[0_0]由于先前记录(时间戳1601327726515)捕获错误而中止

我的streams应用程序只是从一个记录主题具体化一个KTable。主题中有10万条记录,没有问题。但是,主题中有1500万条记录,一旦我们在中获得数百万条记录,实例将崩溃,出现以下异常:

线程“companys-de1f21f9-b445-449e-a59b-5e0cecfa54d1-StreamThread-1”org.apache.kafka.streams.errors.StreamsException中的异常:任务[0_0]由于先前记录(时间戳1601327726515)捕获错误而中止发送由于org.apache.kafka.common.errors.TimeoutException,主题为companys-companys.read-changelog:公司40条记录过期。自批创建以来,read-changelog-0:120001毫秒已过期]

提供了我们正在运行的服务的详细示例

令我不解的是,使我的streams应用程序崩溃的错误(如下)是引用了一个过载的生产者,然而,这个服务只是实现了一个KTable

streamsBuilder
.stream(出口主题,已消费.with(Serdes.String(),companySerde))
.toTable(具体化的.as(companyKTableName)
.withKeySerde(Serdes.String())
.具有ValueSerde(公司订单));
属性我已经在尝试使其名义上运行时进行了调整:

  • batch.size
    10000
  • linger.ms
    1000
  • request.timeout.ms
    300000
  • max.block.ms
    300000
  • retry.backoff.ms
    1000
  • replication.factor
    3

每个表都有一个容错变更日志主题作为支持。因此,每次写入
KTable
也是写入相应的变更日志主题

如果输入主题配置了日志压缩,则可以将程序重写为

streamsBuilder.table(
出口话题,
具体化的.as(CompanyTableName)
.withKeySerde(Serdes.String())
.带ValueSerde(公司订单)
);

此外,您还可以启用
topology.optimization=“all”
:在这种情况下,输入主题将被重新用作变更日志以恢复状态,并且不会创建其他变更日志主题。

Hiya Matthias,谢谢!KTable没有进入我们的最终实现,但我会密切关注一个机会来证实这一点。