You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by Ruibin Xing <xi...@gmail.com> on 2020/06/16 03:57:07 UTC

通过Kafka更新规则

我们有一个Flink Job需要一些自定义的规则,希望能够动态添加、更新、删除。规则的数量在百到千条。目前设计的结构是RDB+ Kafka +
Flink。

RDB存储规则的完整快照,以展示给Web应用作增删改查。改动通过Kafka发送消息至Flink,通过BroadcastState传播规则。

目前有一个问题没有解决:如何使用Kafka来传递状态。我想了一下,大概有几种方案:

1. 消息标记Add、Upadte、Delete类型,在Flink中写逻辑来处理状态以和RDB中状态保持一致。
   目前的问题是,每次重启Job,都需要从头读Kafka,来回放状态的更新。Kafka中的状态消息也需要持久保存。担心长期会堆积很多消息。
2. 使用Kafka Compact Log来解决1的问题。这个方案主要是之前没有使用过Compact Log,不清楚会不会有坑。
3.使用方案1,但是启动时Flink从RDB拉取全量规则。
4. 规则更新后Kafka消息发送全量规则,启动时Flink只拉取最新一条消息。

   各位大佬是否有经验可以分享,怎么处理是比较科学的?不胜感激!

Re: 通过Kafka更新规则

Posted by Ruibin Xing <xi...@gmail.com>.
如果有逻辑上的变更,会导致Checkpoint不可用?之前没有从checkpoint恢复状态的经验,没考虑过可以从checkpoint中恢复,我看看相关资料,感谢!

Sun.Zhu <17...@163.com> 于2020年6月17日周三 上午12:57写道:

> 为什么会重头消费规则呢?没有开启checkpoint吗?重启可以从checkpoint中的offset继续消费kafka中的规则吧
>
>
>
>
> 在2020年06月16日 11:57,Ruibin Xing 写道:
> 我们有一个Flink Job需要一些自定义的规则,希望能够动态添加、更新、删除。规则的数量在百到千条。目前设计的结构是RDB+ Kafka +
> Flink。
>
> RDB存储规则的完整快照,以展示给Web应用作增删改查。改动通过Kafka发送消息至Flink,通过BroadcastState传播规则。
>
> 目前有一个问题没有解决:如何使用Kafka来传递状态。我想了一下,大概有几种方案:
>
> 1. 消息标记Add、Upadte、Delete类型,在Flink中写逻辑来处理状态以和RDB中状态保持一致。
>   目前的问题是,每次重启Job,都需要从头读Kafka,来回放状态的更新。Kafka中的状态消息也需要持久保存。担心长期会堆积很多消息。
> 2. 使用Kafka Compact Log来解决1的问题。这个方案主要是之前没有使用过Compact Log,不清楚会不会有坑。
> 3.使用方案1,但是启动时Flink从RDB拉取全量规则。
> 4. 规则更新后Kafka消息发送全量规则,启动时Flink只拉取最新一条消息。
>
>   各位大佬是否有经验可以分享,怎么处理是比较科学的?不胜感激!
>

回复:通过Kafka更新规则

Posted by "Sun.Zhu" <17...@163.com>.
为什么会重头消费规则呢?没有开启checkpoint吗?重启可以从checkpoint中的offset继续消费kafka中的规则吧




在2020年06月16日 11:57,Ruibin Xing 写道:
我们有一个Flink Job需要一些自定义的规则,希望能够动态添加、更新、删除。规则的数量在百到千条。目前设计的结构是RDB+ Kafka +
Flink。

RDB存储规则的完整快照,以展示给Web应用作增删改查。改动通过Kafka发送消息至Flink,通过BroadcastState传播规则。

目前有一个问题没有解决:如何使用Kafka来传递状态。我想了一下,大概有几种方案:

1. 消息标记Add、Upadte、Delete类型,在Flink中写逻辑来处理状态以和RDB中状态保持一致。
  目前的问题是,每次重启Job,都需要从头读Kafka,来回放状态的更新。Kafka中的状态消息也需要持久保存。担心长期会堆积很多消息。
2. 使用Kafka Compact Log来解决1的问题。这个方案主要是之前没有使用过Compact Log,不清楚会不会有坑。
3.使用方案1,但是启动时Flink从RDB拉取全量规则。
4. 规则更新后Kafka消息发送全量规则,启动时Flink只拉取最新一条消息。

  各位大佬是否有经验可以分享,怎么处理是比较科学的?不胜感激!