当前设置-我正在从16个单个分区主题中流式传输数据,并进行KTable-KTable联接,并从所有流中发送包含聚合数据的输出。我还将每个KTable实现到本地状态存储。
场景-
-
当我尝试运行两个应用程序实例时,我期望它的kafka流可以在单个实例上运行,但由于某种原因,它也可以在其他实例上运行。看起来它可以在某些流异常期间在实例#1上的kafka流失败期间在其他应用程序实例上创建流任务。有关主题的大量待办事项已清除,但是当我通过InteractiveQueryService查询聚合数据状态存储时,我发现几乎没有流数据。看起来它为实例#2上的几个流创建了状态存储。不确定。
-
当我尝试在大量积压的单个实例上运行时,我看到各种异常-超时异常,RecordTooLarge异常。对于记录太大的异常,我实现了productionexceptionhandler来捕获异常并继续。但是看起来它正在超时,而不是KafkaStreams一直崩溃-
- org.apache.kafka.common.errors.TimeoutException:60000毫秒后无法更新元数据。您可以增加生产者参数
retries
和retry.backoff.ms
来避免此错误。
- 针对分区0的5条记录已过期:自上次追加以来已过去381960毫秒;没有更多的记录将被发送,没有更多的抵消
将记录此任务。
- 由于先前记录(键1值[B @ 2时间戳记1548700011925]捕获到错误)而中止发送
abc-xyz-store-changelog由于
org.apache.kafka.common.errors.TimeoutException:更新失败
60000 ms之后的元数据。
当前配置-
- retry.backoff.ms:5000 request.timeout.ms:300000重试次数:5
commit.interval.ms:1000个PROCESSING_GUARANTEE:at_least_once
所有其他值都是默认值,例如-
- MAX_POLL_INTERVAL_MS:2147483647 MAX_POLL_RECORDS:1000
BATCH_SIZE:16384 NUM_STREAM_THREADS:1 LINGER_MS:100
MAX_BLOCK_MS:60000 MAX_IN_FLIGHT_REQ_PER_CONN:5
我希望在单个实例上运行该应用程序而不会崩溃,即使它运行缓慢以确保清除积压也是如此。