当前位置: 首页 > 知识库问答 >
问题:

Flink Kafka用户偏移量在作业重新启动时重置为0

华永新
2023-03-14

我遇到的问题是,当Kafka和Flink作业重新启动时,Flink Kafka消费者偏移量会重置为0,因此即使我启用了检查点并且我在Flink作业中启用了精确一次语义学,数据也会被重新处理。

这是我的环境详细信息

    < li >在Kubernetes下奔跑 < li>Kafka源主题有10个分区,没有复制。 < li >Kafka有三个经纪人。 < li>Flink checkpointing启用了恰好一次语义。 < li>Flink版本为1.12 < li>Flink通过负载平衡器连接到Kafka

只有当源主题有多个分区并且Flink无法连接到分区分布的所有3个代理时,才会出现问题。只有Flink最初连接到的代理中不可用的分区,偏移量才会重置为0。如果我在所有3个代理都可用后等待重新启动Flink作业,则没有问题。这是Kafka消费者设置

auto.offset.reset:最早隔离级别:read_committed

我还在KafkaConsumer上启用了setStartFromGroupOffsets和setCommitOffsetsOnCheckpoints。

请注意,我确保主题中的所有数据都被作业使用,并且Flink通过验证Kafka中提交的偏移量成功地检查了数据。非常感谢任何帮助解决此问题。

我不知道这是Flink问题还是Kafka客户端问题。任何帮助都将不胜感激。

共有1个答案

章光华
2023-03-14

我认为从这样一个没有任何复制设置的设置中得到任何保证是不现实的。

 类似资料:
  • 我对Kafka0.11.0.0有意见 在Kafka0.10.2.1中我对此没有任何问题。我只在0.11.0.0版本中遇到这个问题。 我的使用者将auto.offset.reset设置为最早,而auto commit设置为false,因为我是手动提交的。Kafka数据存储在具有必要权限的非TMP目录中。broker配置的其余部分为默认配置。 我需要0.11.0.0版本的事务。我不知道问题出在哪里。这

  • 我有一个单一的Kafka消费者,它连接到一个有3个分区的主题。一旦我从Kafka那里得到一张唱片,我就想捕捉偏移量和分区。在重新启动时,我希望从上次读取的偏移量恢复使用者的位置 摘自Kafka文档: 每个记录都有自己的偏移量,因此要管理自己的偏移量,只需执行以下操作: 配置enable.auto.commit=false 下面是我的示例代码: 这是正确的做法吗?有没有更好的办法?

  • 但是如果我们重新启动kafka服务器,使用者会重新读取已经提交的偏移量吗?或者这个选项在这样的情况下工作--服务器重新启动后,只会消耗未读的消息?

  • 我有一个Spring Cloud Stream Kafka Stream应用程序,它读取主题(事件)并执行一个简单的处理: 该应用程序使用来自Confluent Cloud的Kafka环境,带有6个分区的事件主题。完整的配置是: 首先,它显示还原使用者客户端的创建。自动偏移复位无: > 配置了两个消费者的原因是什么? 为什么第二个函数具有,而我没有显式配置它,而且Kafka的默认值是最新的? 我已

  • 我使用的是0.10.1.1 API的高级使用者。 奇怪的是,当我关闭应用程序并重新启动它时,偏移量比上次提交的偏移量大一点,我找不到原因。 我在代码中只有一个提交点。 一个分区的示例: 关机前偏移量:3107169023 分区分配时的偏移量:3107180350

  • 我有一个Kafka主题和一个消费者,在Spring云应用程序中分配了一个消费者组(必须)。作为一项要求,在每次应用程序重启时,我都需要从一开始就开始读取所有接收到的消息。这应该是通过属性实现的,但从这个问题可以清楚地看出,它目前不起作用。 我在kafka消费者api中发现了这个变通方法,它建议在每次重启时为消费者组分配一个新的随机名称,作为从最早开始阅读的一种方式。在Spring Cloud St