图表设计网站海外销售是做什么的
2026/5/20 16:26:27 网站建设 项目流程
图表设计网站,海外销售是做什么的,沈阳seo关键字优化,公司网站建设工作重点1、版本与依赖现状#xff1a;Flink 2.2 暂无可用 Connector 官方文档目前明确提示#xff1a;Flink 2.2 还没有可用的 MongoDB connector。 (Apache Nightlies) 同时#xff0c;MongoDB connector 不在 Flink 二进制发行包里#xff0c;跑集群需要你自己把 connector jar…1、版本与依赖现状Flink 2.2 暂无可用 Connector官方文档目前明确提示Flink 2.2 还没有可用的 MongoDB connector。 (Apache Nightlies)同时MongoDB connector不在 Flink 二进制发行包里跑集群需要你自己把 connector jar 带上放lib/或打成 uber-jar。 (Apache Nightlies)如果你在稳定版本线上落地例如 Flink 1.20Maven 中央仓库能找到对应依赖例如DataStream 连接器org.apache.flink:flink-connector-mongodb例如2.0.0-1.20 (Maven Repository)SQL 连接器org.apache.flink:flink-sql-connector-mongodb例如2.0.0-1.20 (Maven Repository)2、三种能力先记住一句话主键决定 Sink 模式MongoDB SQL Connector 的写入有两种模式DDL定义了 PRIMARY KEYSink 进入Upsert 模式可以接收 UPDATE/DELETE 的 changelogDDL不定义 PRIMARY KEY只能Append 模式只允许 INSERT追加写 (Apache Nightlies)这点决定了你后面到底能不能用INSERT INTO ... SELECT ...去承接一个会产生更新/撤回的 Flink SQL 结果比如聚合、Join、TopN、维表更新等。3、快速开始建表、写入、查询、维表 Join 一次跑通3.1 注册 MongoDB 表推荐 Upsert显式主键CREATETABLEMyUserTable(_id STRING,name STRING,ageINT,statusBOOLEAN,PRIMARYKEY(_id)NOTENFORCED)WITH(connectormongodb,urimongodb://user:password127.0.0.1:27017,databasemy_db,collectionusers);NOT ENFORCED的含义是Flink 不帮你在运行时强制校验唯一性但会把这个主键用于 changelog/upsert 语义与下游映射。3.2 写入 MongoDB从别的表 T 写入INSERTINTOMyUserTableSELECT_id,name,age,statusFROMT;3.3 扫描读取 MongoDB有界 ScanSELECT_id,name,age,statusFROMMyUserTable;3.4 作为维表做 temporal joinLookup Source同步SELECT*FROMmyTopicLEFTJOINMyUserTableFORSYSTEM_TIMEASOFmyTopic.proctimeONmyTopic.keyMyUserTable._id;以上 DDL 与用法是官方文档给出的标准示例。 (Apache Nightlies)4、主键与 _id 映射机制为什么 Upsert 天生“幂等”MongoDB 里_id是集合的保留主键唯一且不可变MongoDB connector 会用你在 DDL 定义的主键字段来生成 MongoDB 文档_id从而实现幂等 Upsert主键只有 1 列直接把该字段转成 BSON 值作为_id主键多列把多列按 DDL 顺序组合成一个 BSON document 作为_id形如_id: {f1: v1, f2: v2}(Apache Nightlies)注意两个很容易踩的点1如果 DDL 里有_id字段但主键却不是_id会产生歧义到底谁是 MongoDB 的_id。官方建议要么把_id作为主键要么改名避免冲突。 (Apache Nightlies)2MongoDB 的_id不能是 Array且如果_id是嵌套子字段子字段名不能以$开头。 (Apache Nightlies)4.1 为什么 Upsert 更适合 Flink 容错恢复Flink 发生失败恢复后会从最近一次成功 checkpoint 之后重放一段数据at-least-once 常态这会带来“重放写入”。Upsert 写入因为_id稳定可以天然幂等避免重复数据与唯一键冲突。 (Apache Nightlies)另外一个隐藏坑INSERT OVERWRITE写 MongoDB 时会强制使用 Upsert如果你没在 DDL 定义主键会被拒绝。 (Apache Nightlies)5、分片集群 Sharded CollectionUpsert 必须带 shard keyFlink 用 PARTITIONED BY 来声明MongoDB 对分片集合的更新/Upsert 有额外约束Upsert 的 filter 必须包含 shard key。因此在 Flink SQL 建 sink 表时需要用PARTITIONED BY声明 shard key让 connector 在运行时把 shard key 写进 filter。 (Apache Nightlies)示例官方思路CREATETABLEMySinkTable(_idBIGINT,shardKey0 STRING,shardKey1 STRING,statusSTRING,PRIMARYKEY(_id)NOTENFORCED)PARTITIONEDBY(shardKey0,shardKey1)WITH(connectormongodb,urimongodb://user:password127.0.0.1:27017,databasemy_db,collectionusers);INSERTINTOMySinkTableSELECT_id,shardKey0,shardKey1,statusFROMT;还支持静态/动态分区写入-- 静态分区INSERTINTOMySinkTablePARTITION(shardKey0value0,shardKey1value1)SELECT1,INIT;-- shardKey0 静态 shardKey1 动态INSERTINTOMySinkTablePARTITION(shardKey0value0)SELECT1,value1,INIT;重要限制非常关键虽然 MongoDB 4.2 shard key 可变但在 Flink SQL 的 upsert 场景下如果 shard key 发生更新connector 拿不到“旧 shard key”去构造 filter可能导致重复记录风险因此仍建议 shard key 保持不可变。 (Apache Nightlies)6、Scan Source 并行加速4 种分区策略怎么选MongoDB 批量扫描Scan Source支持并行分区读取核心配置是scan.partition.strategysingle / sample / split-vector / sharded / defaultscan.partition.size分区粒度默认 64mbscan.fetch-size每次 round-trip 拉多少文档默认 2048scan.cursor.no-timeout是否禁用 10 分钟 cursor 超时默认 true但超过 30 分钟处理一个 batch 仍可能导致 session 过期 (Apache Nightlies)策略选择建议按文档特性翻译成工程话single全表一个分区最稳但最慢小表/测试sample抽样生成分区速度快但可能不均匀数据分布很怪时慎用split-vector非分片集合首选分区快且更均匀但需要 splitVector 权限sharded分片集合首选直接用config.chunks的 chunk 范围做分区快且均匀但需要读 config 库权限default分片集合走 sharded否则走 split-vector (Apache Nightlies)一个常用的“批量导入/离线回灌”模板CREATETABLEmongo_scan_users(_id STRING,name STRING,ageINT,statusBOOLEAN,PRIMARYKEY(_id)NOTENFORCED)WITH(connectormongodb,urimongodb://user:password127.0.0.1:27017,databasemy_db,collectionusers,scan.partition.strategydefault,scan.partition.size64mb,scan.fetch-size2048);7、Lookup 维表缓存PARTIAL 缓存让 temporal join 性能起飞但要权衡新鲜度MongoDB connector 的 Lookup Source 目前只支持**同步sync**模式。为了降低维表 join 对 MongoDB 的压力提供了lookup.cache PARTIAL的“进程内缓存”每个 TaskManager 一份。 (Apache Nightlies)关键配置项lookup.cache PARTIAL开启缓存lookup.partial-cache.max-rows最大缓存行数超出会淘汰最旧的lookup.partial-cache.expire-after-write写入后 TTLlookup.partial-cache.expire-after-access访问后 TTLlookup.partial-cache.caching-missing-key是否缓存“查不到”的空结果默认 truelookup.max-retries/lookup.retry.interval失败重试 (Apache Nightlies)典型的维表 join DDL带缓存CREATETABLEdim_users(_id STRING,name STRING,ageINT,statusBOOLEAN,PRIMARYKEY(_id)NOTENFORCED)WITH(connectormongodb,urimongodb://user:password127.0.0.1:27017,databasemy_db,collectionusers,lookup.cachePARTIAL,lookup.partial-cache.max-rows200000,lookup.partial-cache.expire-after-write10 min,lookup.partial-cache.caching-missing-keytrue,lookup.max-retries3,lookup.retry.interval1 s);权衡点务必写在博客里缓存可能不是最新数据TTL 越短越“新鲜”但数据库压力越大TTL 越长吞吐越高但维表可能“旧”。 (Apache Nightlies)8、Filter Pushdown把能下推的过滤交给 MongoDBMongoDB connector 支持将部分 Flink SQL 过滤条件下推到 MongoDB从而减少网络 IO 与 Flink 端处理量。你可以用filter.handling.policy always | never默认 always (Apache Nightlies)支持的过滤映射包括, , , , , , IS NULL, IS NOT NULL, OR, AND等对应 MongoDB 的$eq/$ne/$gt/$gte/$lt/$lte/$or/$and。 (Apache Nightlies)建议如果你的 MongoDB 集群压力大、你又担心下推导致执行计划不可控可以临时设成never来做对比压测与排障。9、Sink 写入批量 flush、重试、并行度与交付语义MongoDB sink 常用参数如下sink.buffer-flush.max-rows默认 1000每批最多缓存多少行sink.buffer-flush.interval默认 1s定时 flushsink.max-retries默认 3/sink.retry.interval默认 1s写失败重试sink.parallelismsink 并行度默认跟上游链sink.delivery-guarantee none | at-least-once目前不支持 exactly-once(Apache Nightlies)实战建议写入侧你追求低延迟调小interval例如 200ms~500ms适当减小max-rows你追求高吞吐调大max-rows例如 5k~20kinterval可保持 1s~5s强烈建议配合 Flink checkpoint 使用否则 at-least-once 缓冲/恢复行为不可控并尽量选择 Upsert 模式提升幂等性10、数据类型映射BSON 到 Flink SQL 的常用对照MongoDB 本质是 BSON 类型系统connector 给出了典型映射ObjectId → STRINGDateTime → TIMESTAMP_LTZ(3)Object → ROWArray → ARRAYDecimal128 → DECIMAL以及一些特殊 BSON 类型会用 Extended JSON 映射到 STRING如 Regex、Symbol、DbPointer 等。 (Apache Nightlies)实战建议如果你希望 Flink 侧 schema 稳定尽量避免在同一个字段上混用 BSON 类型例如同字段既可能是 String 又可能是 Object否则映射与序列化会很难控。11、一份“生产落地清单”先确认版本Flink 2.2 当前仍提示无可用 connector别在依赖上空耗。 (Apache Nightlies)写入推荐 Upsert定义 PRIMARY KEY让_id稳定失败重放也幂等。 (Apache Nightlies)分片集合 Upsert必须把 shard key 用PARTITIONED BY声明并保证 shard key 不变。 (Apache Nightlies)Scan 并行读取优先default需要权限时提前申请 splitVector / config.chunks 读取权限。 (Apache Nightlies)维表 join开启lookup.cachePARTIAL用 TTL 在“新鲜度 vs 吞吐”之间找到平衡。 (Apache Nightlies)打包部署connector 不在二进制发行包里集群必须能加载到 jar。 (Apache Nightlies)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询