Apache kafka Kafka流应用程序在重新启动后不使用数据

Apache kafka Kafka流应用程序在重新启动后不使用数据,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,在我重新启动Kafka集群后,我的Kafka streams应用程序没有收到来自输入主题的消息,并且我得到了一个异常,“can׳t create internal topic”。经过一些研究,我用Kafka工具(输入主题和应用程序)重置了。工具是Kafka streams application reset.sh 不幸的是,它没有解决问题,我也再次得到了异常从错误消息中,可以推断主题已经存在,因此无法创建。失败的原因是,现有主题没有预期的分区数(它有1个而不是150个)——如果分区数匹配,Kaf

在我重新启动Kafka集群后,我的Kafka streams应用程序没有收到来自输入主题的消息,并且我得到了一个异常
“can׳t create internal topic”
。经过一些研究,我用Kafka工具(输入主题和应用程序)重置了。工具是
Kafka streams application reset.sh


不幸的是,它没有解决问题,我也再次得到了
异常

从错误消息中,可以推断主题已经存在,因此无法创建。失败的原因是,现有主题没有预期的分区数(它有1个而不是150个)——如果分区数匹配,Kafka Streams将只使用现有主题

如果在代理中启用了主题自动创建(并且主题是使用错误的分区数创建的),或者输入主题的分区数发生了更改,则可能会发生这种情况。Kafka Streams不会自动更改重新分区主题的分区数,因为这可能会导致数据损坏,从而导致不正确的结果

解决此问题的一种方法是手动删除此主题:请注意,这可能会导致数据丢失,只有当您知道这是您想要的时,才应该这样做

另一种(更好的方法)是使用
bin/kafka streams application reste.sh
KafkaStreams\cleanup()
干净地重置应用程序

因为您需要清理应用程序,并且用户应该知道其中的含义,所以Kafka Streams无法让用户意识到问题,而不是“自动神奇地”采取一些从用户角度看可能不需要的操作

查看文档了解更多详细信息。还有一篇博客文章详细解释了应用程序重置:


从错误消息中,可以推断主题已经存在,因此无法创建。失败的原因是,现有主题没有预期的分区数(它有1个而不是150个)——如果分区数匹配,Kafka Streams将只使用现有主题

如果在代理中启用了主题自动创建(并且主题是使用错误的分区数创建的),或者输入主题的分区数发生了更改,则可能会发生这种情况。Kafka Streams不会自动更改重新分区主题的分区数,因为这可能会导致数据损坏,从而导致不正确的结果

解决此问题的一种方法是手动删除此主题:请注意,这可能会导致数据丢失,只有当您知道这是您想要的时,才应该这样做

另一种(更好的方法)是使用
bin/kafka streams application reste.sh
KafkaStreams\cleanup()
干净地重置应用程序

因为您需要清理应用程序,并且用户应该知道其中的含义,所以Kafka Streams无法让用户意识到问题,而不是“自动神奇地”采取一些从用户角度看可能不需要的操作

查看文档了解更多详细信息。还有一篇博客文章详细解释了应用程序重置:


如果没有堆栈跟踪,很难说——集群本身运行时是否有足够的节点?您使用什么复制因子?您使用的代理和流版本是什么?是否启用了auto.create.topics.enable?以下要点是堆栈跟踪@MatthiasJ.Sax我们的版本是1.0.0,集群的所有内容都很好(根据监视器),流的副本系数是1。@Jacky是的,我们保留默认值,我理解这与streams无关,因为它运行一个topiccreate命令,并且当您试图读/写topic或不存在topic时,配置才是相关的。但是,如果没有堆栈跟踪,我可能很难说——集群本身是否有足够的节点在运行?您使用什么复制因子?您使用的代理和流版本是什么?是否启用了auto.create.topics.enable?以下要点是堆栈跟踪@MatthiasJ.Sax我们的版本是1.0.0,集群的所有内容都很好(根据监视器),流的副本系数是1。@Jacky是的,我们保留默认值,我理解这与streams无关,因为它运行一个topiccreate命令,并且当您试图读/写topic或不存在topic时,配置才是相关的。但可能是我错了,我重置了,并且我的应用程序调用了cleanup()。重置后也发生此错误。一些更奇怪的行为是,在重置之后,所有150个分区都被删除,但几秒钟后,它出现在1个分区中,应用程序关闭,因此这不是因为auto createI重置了,也不是因为我的应用程序调用了cleanup()。重置后也发生此错误。一些更奇怪的行为是,在重置之后,所有150个分区都被删除了,但几秒钟之后,它出现在1个分区中,并且应用程序关闭了,所以这不是因为自动创建