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 tingli ke <ke...@gmail.com> on 2020/04/15 02:55:20 UTC

JDBCLookupFunction被缓存导致数据的不及时性

Hi,
流表通过JDBCLookupFunction来对mysql的维表数据进行实时join,但是JDBCLookupFunction会对数据进行缓存,导致mysql的维表数据被更新,但是flink还是老的数据,(考虑性能需要被缓存)
是否有其他的方式来对mysql维表数据进行实时join

Re: JDBCLookupFunction被缓存导致数据的不及时性

Posted by tingli ke <ke...@gmail.com>.
您好,不使用cache会导致每个记录都要查一次mysql,效率很低效

13122260573@163.com <13...@163.com> 于2020年4月15日周三 上午11:08写道:

> 有个setCacheMaxSize(1000),可以改成 -1 表示不使用cache
> org.apache.flink.api.java.io.jdbc.JDBCLookupFunction 这个方法有解释
> The cacheMaxSize is -1 means not use cache
>
>
>
> 13122260573@163.com
>
> 发件人: tingli ke
> 发送时间: 2020-04-15 10:55
> 收件人: user-zh
> 主题: JDBCLookupFunction被缓存导致数据的不及时性
> Hi,
>
> 流表通过JDBCLookupFunction来对mysql的维表数据进行实时join,但是JDBCLookupFunction会对数据进行缓存,导致mysql的维表数据被更新,但是flink还是老的数据,(考虑性能需要被缓存)
> 是否有其他的方式来对mysql维表数据进行实时join
>

Re: Re: JDBCLookupFunction被缓存导致数据的不及时性

Posted by "wangweiguang@stevegame.cn" <wa...@stevegame.cn>.
参考下这篇文章,里面有好多维度关联场景案例讲解!
https://ververica.cn/developers/flink-datastream-associated-dimension-table-practice/ 




 
发件人: tingli ke
发送时间: 2020-04-15 11:22
收件人: user-zh
主题: Re: JDBCLookupFunction被缓存导致数据的不及时性
是否有其他的方式来对mysql维表数据进行实时join
 
 
13122260573@163.com <13...@163.com> 于2020年4月15日周三 上午11:08写道:
 
> 有个setCacheMaxSize(1000),可以改成 -1 表示不使用cache
> org.apache.flink.api.java.io.jdbc.JDBCLookupFunction 这个方法有解释
> The cacheMaxSize is -1 means not use cache
>
>
>
> 13122260573@163.com
>
> 发件人: tingli ke
> 发送时间: 2020-04-15 10:55
> 收件人: user-zh
> 主题: JDBCLookupFunction被缓存导致数据的不及时性
> Hi,
>
> 流表通过JDBCLookupFunction来对mysql的维表数据进行实时join,但是JDBCLookupFunction会对数据进行缓存,导致mysql的维表数据被更新,但是flink还是老的数据,(考虑性能需要被缓存)
> 是否有其他的方式来对mysql维表数据进行实时join
>

Re: JDBCLookupFunction被缓存导致数据的不及时性

Posted by Zhenghua Gao <do...@gmail.com>.
有两个参数可以控制cache大小和cache失效时间 [1],你可以在性能和准确性上做权衡

  -- lookup options, optional, used in temporary join
  'connector.lookup.cache.max-rows' = '5000', -- optional, max number
of rows of lookup cache, over this value, the oldest rows will
                                              -- be eliminated.
"cache.max-rows" and "cache.ttl" options must all be specified if any
                                              -- of them is specified.
Cache is not enabled as default.
  'connector.lookup.cache.ttl' = '10s', -- optional, the max time to
live for each rows in lookup cache, over this time, the oldest rows
                                        -- will be expired.
"cache.max-rows" and "cache.ttl" options must all be specified if any
of
                                        -- them is specified. Cache is
not enabled as default.
  'connector.lookup.max-retries' = '3', -- optional, max retry times
if lookup database failed

[1]
https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/table/connect.html#jdbc-connector

*Best Regards,*
*Zhenghua Gao*


On Wed, Apr 15, 2020 at 11:28 AM Dino Zhang <vi...@gmail.com>
wrote:

> 可以考虑调小cache.ttl
>
> On Wed, Apr 15, 2020 at 11:22 AM tingli ke <ke...@gmail.com> wrote:
>
> > 是否有其他的方式来对mysql维表数据进行实时join
> >
> >
> > 13122260573@163.com <13...@163.com> 于2020年4月15日周三 上午11:08写道:
> >
> > > 有个setCacheMaxSize(1000),可以改成 -1 表示不使用cache
> > > org.apache.flink.api.java.io.jdbc.JDBCLookupFunction 这个方法有解释
> > > The cacheMaxSize is -1 means not use cache
> > >
> > >
> > >
> > > 13122260573@163.com
> > >
> > > 发件人: tingli ke
> > > 发送时间: 2020-04-15 10:55
> > > 收件人: user-zh
> > > 主题: JDBCLookupFunction被缓存导致数据的不及时性
> > > Hi,
> > >
> > >
> >
> 流表通过JDBCLookupFunction来对mysql的维表数据进行实时join,但是JDBCLookupFunction会对数据进行缓存,导致mysql的维表数据被更新,但是flink还是老的数据,(考虑性能需要被缓存)
> > > 是否有其他的方式来对mysql维表数据进行实时join
> > >
> >
>
>
> --
> Regards,
> DinoZhang
>

Re: JDBCLookupFunction被缓存导致数据的不及时性

Posted by Dino Zhang <vi...@gmail.com>.
可以考虑调小cache.ttl

On Wed, Apr 15, 2020 at 11:22 AM tingli ke <ke...@gmail.com> wrote:

> 是否有其他的方式来对mysql维表数据进行实时join
>
>
> 13122260573@163.com <13...@163.com> 于2020年4月15日周三 上午11:08写道:
>
> > 有个setCacheMaxSize(1000),可以改成 -1 表示不使用cache
> > org.apache.flink.api.java.io.jdbc.JDBCLookupFunction 这个方法有解释
> > The cacheMaxSize is -1 means not use cache
> >
> >
> >
> > 13122260573@163.com
> >
> > 发件人: tingli ke
> > 发送时间: 2020-04-15 10:55
> > 收件人: user-zh
> > 主题: JDBCLookupFunction被缓存导致数据的不及时性
> > Hi,
> >
> >
> 流表通过JDBCLookupFunction来对mysql的维表数据进行实时join,但是JDBCLookupFunction会对数据进行缓存,导致mysql的维表数据被更新,但是flink还是老的数据,(考虑性能需要被缓存)
> > 是否有其他的方式来对mysql维表数据进行实时join
> >
>


-- 
Regards,
DinoZhang

Re: Re: JDBCLookupFunction被缓存导致数据的不及时性

Posted by Jark Wu <im...@gmail.com>.
Hi,

我觉得你的需求是“使用系统时间关联维表变更日志”。
这种方式可以保证最低的延迟,而且能保持高吞吐。
不过这个功能目前还没有原生支持,Flink 1.11 会支持读取变更日志。但关联维表变更日志可能要等到1.12。

当前,可以通过 temporal table function join [1] 来满足需求,就是需要一定的开发量。需要你自己去将 mysql
binlog 数据(只能有 upsert 数据,不能有 delete)读进来构造成 Table。

Best,
Jark

[1]:
https://ci.apache.org/projects/flink/flink-docs-stable/dev/table/streaming/temporal_tables.html#temporal-table-function



On Wed, 15 Apr 2020 at 12:07, wangweiguang@stevegame.cn <
wangweiguang@stevegame.cn> wrote:

>
> 参考下这篇文章,里面有好多维度关联场景案例讲解!
>
> https://ververica.cn/developers/flink-datastream-associated-dimension-table-practice/
>
>
>
>
>
> 发件人: tingli ke
> 发送时间: 2020-04-15 11:22
> 收件人: user-zh
> 主题: Re: JDBCLookupFunction被缓存导致数据的不及时性
> 是否有其他的方式来对mysql维表数据进行实时join
>
>
> 13122260573@163.com <13...@163.com> 于2020年4月15日周三 上午11:08写道:
>
> > 有个setCacheMaxSize(1000),可以改成 -1 表示不使用cache
> > org.apache.flink.api.java.io.jdbc.JDBCLookupFunction 这个方法有解释
> > The cacheMaxSize is -1 means not use cache
> >
> >
> >
> > 13122260573@163.com
> >
> > 发件人: tingli ke
> > 发送时间: 2020-04-15 10:55
> > 收件人: user-zh
> > 主题: JDBCLookupFunction被缓存导致数据的不及时性
> > Hi,
> >
> >
> 流表通过JDBCLookupFunction来对mysql的维表数据进行实时join,但是JDBCLookupFunction会对数据进行缓存,导致mysql的维表数据被更新,但是flink还是老的数据,(考虑性能需要被缓存)
> > 是否有其他的方式来对mysql维表数据进行实时join
> >
>

Re: JDBCLookupFunction被缓存导致数据的不及时性

Posted by tingli ke <ke...@gmail.com>.
是否有其他的方式来对mysql维表数据进行实时join


13122260573@163.com <13...@163.com> 于2020年4月15日周三 上午11:08写道:

> 有个setCacheMaxSize(1000),可以改成 -1 表示不使用cache
> org.apache.flink.api.java.io.jdbc.JDBCLookupFunction 这个方法有解释
> The cacheMaxSize is -1 means not use cache
>
>
>
> 13122260573@163.com
>
> 发件人: tingli ke
> 发送时间: 2020-04-15 10:55
> 收件人: user-zh
> 主题: JDBCLookupFunction被缓存导致数据的不及时性
> Hi,
>
> 流表通过JDBCLookupFunction来对mysql的维表数据进行实时join,但是JDBCLookupFunction会对数据进行缓存,导致mysql的维表数据被更新,但是flink还是老的数据,(考虑性能需要被缓存)
> 是否有其他的方式来对mysql维表数据进行实时join
>

Re: JDBCLookupFunction被缓存导致数据的不及时性

Posted by "13122260573@163.com" <13...@163.com>.
有个setCacheMaxSize(1000),可以改成 -1 表示不使用cache
org.apache.flink.api.java.io.jdbc.JDBCLookupFunction 这个方法有解释
The cacheMaxSize is -1 means not use cache



13122260573@163.com
 
发件人: tingli ke
发送时间: 2020-04-15 10:55
收件人: user-zh
主题: JDBCLookupFunction被缓存导致数据的不及时性
Hi,
流表通过JDBCLookupFunction来对mysql的维表数据进行实时join,但是JDBCLookupFunction会对数据进行缓存,导致mysql的维表数据被更新,但是flink还是老的数据,(考虑性能需要被缓存)
是否有其他的方式来对mysql维表数据进行实时join