Apache kafka 卡夫卡流媒体应用程序在与卡夫卡连接后仅读取最新消息

Apache kafka 卡夫卡流媒体应用程序在与卡夫卡连接后仅读取最新消息,apache-kafka,streaming,Apache Kafka,Streaming,我们正在使用卡夫卡流媒体库为卡夫卡主题的传入消息构建实时通知类系统,因此,当流媒体应用程序运行时,它会实时处理主题中的所有传入消息,并在遇到某种预定义的传入消息时发送通知 如果流媒体应用程序关闭并再次启动,我们只需要处理流媒体应用程序初始化后收到的最新消息。这是为了避免处理流媒体应用程序未运行或关闭时未处理的旧记录。默认情况下,流媒体应用程序开始处理自上次提交的偏移量以来的旧消息。卡夫卡流媒体应用程序中是否有允许只处理最新消息的设置 KafkaConsumer的“auto.offset.rese

我们正在使用卡夫卡流媒体库为卡夫卡主题的传入消息构建实时通知类系统,因此,当流媒体应用程序运行时,它会实时处理主题中的所有传入消息,并在遇到某种预定义的传入消息时发送通知


如果流媒体应用程序关闭并再次启动,我们只需要处理流媒体应用程序初始化后收到的最新消息。这是为了避免处理流媒体应用程序未运行或关闭时未处理的旧记录。默认情况下,流媒体应用程序开始处理自上次提交的偏移量以来的旧消息。卡夫卡流媒体应用程序中是否有允许只处理最新消息的设置

KafkaConsumer的“auto.offset.reset”默认值为“latest” 但如果要使用KafkaStreams,默认值为“最早” 参考:

所以,,
如果set auto.offset.reset是“最新的”,它将是您想要的。

您的假设是正确的。即使您将
auto.offset.reset
设置为
latest
,您的应用程序也已具有消费者偏移量

因此,您必须使用带有这些选项的
卡夫卡消费群体
命令将偏移量重置为最新值
--reset offset--to latest--execute


检查不同的重置方案,您甚至可以从文件等重置为特定的日期时间或按时段重置。

实际上,我尝试了“最新”,但只有在没有使用者偏移量的情况下才有效。否则,如果使用者偏移量已经>0,则auto.offset.reset无效。客户端将从下一个偏移量中拾取消息。根据我的理解,默认情况下,kafka consumer从消费组偏移量的剩余位置(上次提交的偏移量)拾取消息。这不取决于时间。所以在我的例子中,我可能需要拒绝时间戳早于消费者开始时间的记录。当然,这意味着我需要有一个带有相关时间戳的消息。根据启动0.10.0,可以将时间戳与消息关联。解决方案在本线程中详细介绍:如果您的组id是动态的,则每次启动流媒体应用程序时,您都将处理最新消息。