开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

有大佬知道这个问题吗?我测试的是,sqlserver 同步sqlserver

3229问.png

展开
收起
游客3oewgrzrf6o5c 2022-08-17 17:44:52 383 0
1 条回答
写回答
取消 提交回答
  • 全栈JAVA领域创作者

    这个问题通常是由于你使用的是简单的字符串比较,而不是使用 Rocketmq 提供的对比方法,导致同步出现问题。 具体来说,当你在 Rocketmq 中发送消息时,需要设置订阅模式为“只订阅不同步”,否则会出现数据不一致的情况。如果你没有设置订阅模式,或者使用了错误的订阅模式,就会导致同步出现问题。 下面是一些可能的解决方法:

    设置订阅模式为“只订阅不同步”,即在发送消息时指定“订阅模式=0”,例如: Copy code producer.send("TopicTest", "Hello World", "orderId", 123456, 0); 检查发送消息的顺序和订阅消息的顺序是否一致,如果不一致,就需要调整订阅模式,例如: Copy code // 发送消息时,设置订阅模式为“只订阅不同步” producer.send("TopicTest", "Hello World", "orderId", 123456, 0);

    // 然后,在消费者中设置订阅模式为“只订阅同步”,即“订阅模式=1” consumer.subscribe("TopicTest", "orderId", 123456, "onlySync");

    // 最后,等待消息被同步 consumer.consume(); 检查数据库的记录是否已经被删除或更新,导致数据不一致,需要重新查询数据库中的记录,例如: Copy code // 查询数据库中 orderId 为 123456 的记录 QueryResult queryResult = jdbcTemplate.query(SQL_QUERY, new BeanPropertyRowMapper<>(Order.class)); List orders = queryResult.getRows();

    // 将已经被消费的记录从数据库中删除 if (orders.size() > 0) { jdbcTemplate.update(SQL_DELETE, new BeanPropertyRowMapper<>(Order.class), orders.get(0)); } 综上所述,当你在 Rocketmq 中发送消息时,需要设置订阅模式为“只订阅不同步”,并且注意发送消息的顺序和订阅消息的顺序是否一致。如果出现问题,可以检查数据库中的记录是否正确,并且可以尝试调整订阅模式。

    2023-06-18 10:55:11
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关电子书

更多
移动互联网测试到质量的转变 立即下载
给ITer的技术实战进阶课-阿里CIO学院独家教材(四) 立即下载
F2etest — 多浏览器兼容性测试整体解决方案 立即下载