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

是否有可能实现至少一次语义学使用Kafka在闪烁不使用chekpoint?

濮君植
2023-03-14

我想编写一个简单的Flink应用程序,它可以读取Kafka队列并处理消息,并将输出存储到外部系统,至少具有一次语义,并且不使用检查点。我希望避免检查点,因为如果Kafka偏移量被检查,那么所有中间状态也必须被检查。换句话说,我希望应用程序尽可能无状态。

我设想的至少一次工作的方式如下:

  1. 有消息称Kafka

请注意:

  • 如果2.或3.失败,应用程序重新启动,将再次处理相同的消息(好)
  • 如果2。和3。成功,4。失败并且应用程序重新启动,我们将存储两次结果(可接受)

基于https://ci.apache.org/projects/flink/flink-docs-stable/dev/connectors/kafka.html#kafka-消费者抵消了提交行为配置的影响,获得至少一次(或更严格的一次)保证的唯一方法是使用检查点。

问题的核心似乎是4.需要通信回1.以ack到Kafka,这在标准Flink中无法发生,但应该可以使用有状态函数。

总而言之,问题是:在《Flink》中使用Kafka,而不使用切点,是否有可能实现至少一次语义?

共有1个答案

万高畅
2023-03-14

根据你已经链接的留档,它说:

禁用检查点:如果禁用检查点,Flink Kafka使用者依赖于内部使用的Kafka客户端的自动定期偏移提交功能。因此,要禁用或启用偏移提交,只需在提供的属性配置中将enable.auto.commit/auto.commit.interval.ms键设置为适当的值

由于您的目标是禁用检查点,您可以设置

enable.auto.commit=true
auto.commit.interval.ms=??? // use a time high enough such that your steps 2. and 3. are covered. 
 类似资料:
  • 我有一个使用Apache Flink(Flink版本:1.8.1)使用Scala进行流式处理的工作。flow作业要求如下:Kafka->写给Hbase->用不同的主题再次发送给Kafka 在向Hbase写入过程中,需要从另一个表中检索数据。为确保数据不为空(NULL),作业必须(在一定时间内)重复检查数据是否为空。 编辑:我的意思是,有了我在内容中描述的问题,我想过必须在作业流中创建某种类型的作业

  • 现在我正在用Apache Kafka做一些测试。在Kafka生产者的配置中,参数batch.size和linger.ms控制批处理策略。是否可以在生产的同时动态地制作这些参数?例如。如果数据摄取率上升很快,我们可能希望增加batch.size以每批积累更多的消息。我没有找到任何动态批处理与Kafka生产者的例子。有没有可能实施?

  • 我正在做一个选择工具,我已经带来了这些解决方案,在第一次使用J面板getGraphics方法,我在鼠标被拖动的任何地方绘制一个椭圆形,在第二次我覆盖了油漆组件方法来绘制椭圆形。 当我执行第一个时,拖动鼠标会闪烁,绘图很差,而第二个方法运行完美。为什么会发生这种情况?,如果我在第一个解决方案中退出重新绘制,它会绘制椭圆形并且不会“删除”它们。 这样做的最佳实践是什么?,当我用getGraphics绘

  • 我试图在Flink中编写一个需要两个阶段的计算。 在第一阶段,我创建一个Graph并获取它的顶点id: 在第二阶段,我想使用这些ID为每个顶点运行SingleSourceShortestPath。 它在本地工作(在IntelliJ IDE和命令行中使用),但当我使用其WebUI在Flink上提交作业时,程序只是执行直到方法并且不运行程序的剩余部分(用于语句和)。 问题是什么? 这是我的代码:

  • 让我们假设这样一个简单的例子: KStream使用带有转换器的转换操作来消除ORDER_主题中的重复消息,该转换器通过密钥/id将消息存储在持久本地状态存储中。这样,如果相同的顺序到达两次,它将被忽略。 现在一个新订单到达,它不是重复的,所以它存储在本地存储中,但在将其发送到VALIDATED_ORDER_TOPIC应用程序崩溃之前。 我想知道KStream中的事务保证是什么:记录是否已存储并提交