You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "Flink CDC Issue Import (Jira)" <ji...@apache.org> on 2024/03/20 09:21:00 UTC

[jira] [Commented] (FLINK-34775) [Bug] oracle cdc logminer can't catch up the latest records when scn huge increment occured.

    [ https://issues.apache.org/jira/browse/FLINK-34775?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17828704#comment-17828704 ] 

Flink CDC Issue Import commented on FLINK-34775:
------------------------------------------------

Date: Thu Mar 23 15:07:19 CST 2023, Author: [huanzui|https://github.com/huanzui]

同样的版本配置,遇到同样的问题,一直循环打日志,监听不到新记录

> [Bug] oracle cdc logminer can't catch up the latest records when scn huge increment occured.
> --------------------------------------------------------------------------------------------
>
>                 Key: FLINK-34775
>                 URL: https://issues.apache.org/jira/browse/FLINK-34775
>             Project: Flink
>          Issue Type: Bug
>          Components: Flink CDC
>            Reporter: Flink CDC Issue Import
>            Priority: Major
>              Labels: github-import
>
> ### Search before asking
> - [X] I searched in the [issues|https://github.com/ververica/flink-cdc-connectors/issues) and found nothing similar.
> ### Flink version
> 1.16.0
> ### Flink CDC version
> 2.3.0
> ### Database and its version
> - oracle 11g
> - oracle 12c
> ### Minimal reproduce step
> 1. create a simple cdc source table(connector='oracle-cdc')
> 2. this is no special requirements about sink
> 3. while oracle database instance scn huge increment, the LogminerStreamingChangeEvent can not catch up the latest record in time.
> The problem is because `LogMinerQueryResultProcessor` can not feedback more reasonable `lastProcessedScn` after process mining view's data.  During data cycle processing,the first cycle could get the right last `processedScn`,the `endScn` will be reset to the `processedScn`, is will be used in the next cycle as `startScn`, unfortunately the next cycle can not query any mining view datas about the source table, the `startScn` can not be move an in short time any more. 
> however oracle scn is already huge increment, the source table's new datas can't get in time.
> the main code in `LogMinerStreamingChangeEventSource` :
> ```java
>   final Scn lastProcessedScn = processor.getLastProcessedScn();
>   if (!lastProcessedScn.isNull()
>           && lastProcessedScn.compareTo(endScn) < 0) {
>       // If the last processed SCN is before the endScn we need to
>       // use the last processed SCN as the
>       // next starting point as the LGWR buffer didn't flush all
>       // entries from memory to disk yet.
>       endScn = lastProcessedScn;
>   }
>   
>   if (transactionalBuffer.isEmpty()) {
>       LOGGER.debug(
>               "Buffer is empty, updating offset SCN to {}",
>               endScn);
>       offsetContext.setScn(endScn];
>   } 
> ```
> BTW: The implementation has changed since version debezium 1.6.x, `LogminerStreamingChangeEvent` has been optimized in debezium-connector-oracle. 
> ### What did you expect to see?
> reset the right `startScn` when there is no scn scan records.
> ### What did you see instead?
> the first cycle `lastProcessedScn` worked as `startScn` in a long time.
> ### Anything else?
> _No response_
> ### Are you willing to submit a PR?
> - [X] I'm willing to submit a PR!
> ---------------- Imported from GitHub ----------------
> Url: https://github.com/apache/flink-cdc/issues/1940
> Created by: [green1893|https://github.com/green1893]
> Labels: bug, 
> Created at: Fri Feb 24 14:32:22 CST 2023
> State: open



--
This message was sent by Atlassian Jira
(v8.20.10#820010)