ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Redpanda Connect Iceberg 输出性能基准测试与调优指南

Redpanda Connect Iceberg 输出性能基准测试与调优指南 Redpanda Connect Iceberg 输出性能基准测试与调优指南【免费下载链接】connectFancy stream processing made operationally mundane项目地址: https://gitcode.com/GitHub_Trending/con/connectRedpanda Connect 的iceberg输出组件通过 REST Catalog 将流式数据写入 Apache Iceberg 表本文基于仓库中的 docs/benchmark-results/iceberg.md 基准结果结合 internal/impl/iceberg/ 下的源码、测试与配置系统梳理该组件在批处理规模、并发提交max_in_flight、CPU 核数、压缩编解码器、Copy-on-write 写放大与内存开销等维度上的实测表现并给出可复制的调优配方。读完本文你将掌握记录数/提交records per commit这一核心杠杆的使用方法能够结合自身工作负载为 Iceberg 输出配置出最优的batching、max_in_flight与压缩策略。基准测试环境与方法概述所有本地基准均使用MinIOS3 兼容 本地 REST CatalogDocker 内运行作为存储与元数据后端Copy-on-write 相关章节还包含针对真实 Databricks Unity Catalog 的运行结果。基础环境本地吞吐基准CPUIntel Core i7-10850H 2.70GHz32 GB RAM操作系统WSL2Linux 6.6.87.2x86_64基础设施MinIO REST catalog 运行于 Dockerlocalhost数据集由generate输入在最大速率下生成的合成事件count: 0, interval: 每条消息约 142 B含id, user_id, event_type, value, info, ts六个字段吞吐量在 pipeline processor 处测量——实际写入 MinIO 的字节数会因 Parquet 列式压缩而不同。每次运行写入 1,000,000 条消息。具体的基准配置与运行说明位于 internal/impl/iceberg/bench/README.md基础配置模板见 internal/impl/iceberg/bench/benchmark_config.yaml。其中input.generate生成的合成事件字段与数据形状如下input: generate: count: 0 interval: mapping: | root.id counter() root.user_id (counter() % 10000) 1 root.event_type [click, view, purchase, scroll, hover].index(counter() % 5) root.value (counter() % 1000) random_int(max: 100) root.info event info for record counter().string() root.ts now()吞吐量通过内置的benchmark处理器统计interval: 1s, count_bytes: true运行日志以INFO rolling stats: 5000 msg/sec, 3.2 MB/sec的形式输出统计点在写入 Iceberg 之前的 pipeline 阶段。写入吞吐量CPU 核数与批处理规模基准对GOMAXPROCS1/2/4/8与batching.count1000/5000/10000做交叉测试每个 batch 对应一次 catalog 提交往返commit round-trip。msg/secGOMAXPROCSbatch1000batch5000batch1000017573,1055,44221,1864,4086,76341,1474,7588,48381,0564,1078,231(unbounded)kB/secbatch1000/5000/ MB/secbatch10000GOMAXPROCSbatch1000batch5000batch10000110643577421666189614161667120681485761170(unbounded)关键观察批处理规模是主导因素。单核场景下吞吐量从 757batch1000→ 3,105batch5000→ 5,442batch10000msg/sec 呈 ~7 倍增长。原因在于每个 batch 一次 catalog 提交提交次数越少吞吐越高。batch5000 与 batch10000 在核数增至 4 时仍有收益但到 8 核时回落——提交开销被摊薄后 CPU 并行开始有帮助但 8 核引入了新的争用。写入吞吐量批处理规模与 max_in_flight固定GOMAXPROCS4变化batching.count与max_in_flight考察并发 catalog 提交的影响。在 internal/impl/iceberg/config.go 中可以看到max_in_flight的默认值为4batching为独立的批策略字段。msg/secmax_in_flightbatch5000batch1000044,7588,48387,10513,8391612,97323,3163220,46234,8356434,99333,70312833,91133,742MB/secmax_in_flightbatch5000batch1000040.671.2181.002.00161.803.30322.905.00645.004.801284.804.80关键观察max_in_flight是最有效的调优旋钮。batch10000 时吞吐量从 8,483MIF4→ 13,839MIF8→ 23,316MIF16→ 34,835MIF32msg/sec仅靠提高并发提交就获得约 4 倍收益。吞吐上限约为 34K msg/sec / 5 MB/sec在 batch10000 时于 MIF32 触顶、batch5000 时于 MIF64 触顶。这是 MinIO 的吞吐上限而非连接器本身的瓶颈。两个 batch 规模在高 MIF 下收敛——都稳定在 ~34K msg/secbatch10000 用更少的并发MIF32 vs MIF64就达到上限。甜点区间batch10000、MIF32——以最小并发开销达到最大吞吐。两个章节共同的核心结论Iceberg 写入瓶颈在 catalog 提交延迟连接器自身不是瓶颈。提高max_in_flight让提交并发化吞吐几乎线性增长直至 MinIO 饱和。对比Kafka Connect vs Redpanda Connect Iceberg端到端对比测试位于 internal/impl/iceberg/bench/kafka-connector/环境为 i7-10850H / WSL2数据集 10,000,000 条合成事件MinIO Iceberg REST catalog 运行于 Docker。两侧均使用10s 提交窗口 16 个 Kafka 分区转换逻辑为每条消息计算 5 个派生字段event_id, value_usd, value_tier, ts_ms, is_high_value。仅 Sink无转换ConnectorThroughputKafka Connect (Tabular)84,745 msg/sRedpanda Connect61,349 msg/s转换 SinkConnectorKafka CPUsThroughputKafka Connect (Tabular)unbounded37,037 msg/sRedpanda Connectunbounded47,272 msg/sRedpanda Connect145,248 msg/sRedpanda Connect248,829 msg/s说明Kafka Connect 纯 sink 最快——16 个 task 直接消费预处理好的数据写入 Iceberg。Kafka Connect 带转换时需要先由独立的 RPCN 预处理步骤将结果写入中间 Kafka topicbench-events-transformedKafka Connect 再消费该 topic 落 Iceberg。两段式 I/O 使吞吐量下降超过一半。Redpanda Connect 在同一管道内完成转换与 Iceberg 写入——无中间 topic、无额外 Kafka 往返。端到端真实场景Redpanda Connect 约为 Kafka Connect 的 1.3 倍47k vs 37k msg/s。Copy-on-write 写放大该章节衡量merge_strategy: copy-on-write下一次变更重写了多少表数据——它是被触及键数K与表内数据文件数M的函数。测试使用真实 parquet 文件每个数据文件 1,000 行、每行 ~128 B payload由 internal/impl/iceberg/cow_amplification_bench_test.go 中的TestCOWWriteAmplification/TestCOWWriteAmplificationScale驱动。测试代码注释说明了其设计意图该 harness 属于去风险工具非生产代码用于判断 copy-on-write 是否适合流式 CDC 场景它预置 M 个数据文件每个文件持有连续不重叠的 id 区间模拟有序/聚簇键这一现实 CDC 场景再施加触及 K 个键的删除操作并测量 COW 的重写比例同时与 merge-on-readMOR对比。环境Apple M3 Pro本地文件系统MinIO 级对象存储行为通过进程内 harness 模拟 Iceberg REST catalog 语义。表重写比例keys touched (K)data files (M)key placementtable rewrittenper-row amplification110single file7.2%~718x1010one per file100%100200scattered~49.9%10200scattered~4.6%100—all in one fileone file~7.3x更大文件的规模检查在 M4 下用 1 MB / 2 MB / 4 MB 数据文件重跑扫描K/M 模型在大文件下依然成立copy-on-write 会重写所有包含至少一个被触及键的数据文件因此 K 个键散布在 M 个文件上时表重写比例 ≈ K/M。单个键被触及也会重写整个所在文件无论文件多大。重写吞吐约 130 MB/sec1 MB 文件随每次提交的开销被摊薄而升至 ~440 MB/sec4 MB 文件。关键观察写放大由键的散布程度决定而非键的数量。1 个散布的键带来 ~718x 的行级放大而 100 个集中在同一文件中的键只有 ~7.3x。更新按文件聚簇的工作负载如按时间序写入、更新近期数据比均匀随机更新放大程度低得多。与 merge-on-read 的对比同样的变更在merge_strategy: merge-on-read下无论 K 多大都只写约 2–4 KB 的 equality-delete 文件——copy-on-write 用这部分写代价换取无 delete 文件的表从而让引擎型 catalog如 Snowflake、Databricks Unity Catalog可以读取。从 internal/impl/iceberg/config.go 的 merge-strategies 文档可以看到设计权衡的完整背景merge-on-read默认写 Iceberg v2 equality-delete 文件并在读取时应用写入便宜、适合流式场景但只有 catalog-native / Flink 生态引擎Apache Polaris、Flink、Trino、Spark能读copy-on-write重写整个数据文件表中只有普通数据文件无 delete 文件Snowflake 与 Databricks Unity Catalog 等引擎型 catalog 也能读且可在 v1 或 v2 表上工作、不强制不可逆的 v1→v2 升级。Copy-on-write 内存开销测量 keyed 批次在 copy-on-write 提交期间被物化为单个 Arrow 记录时的内存成本由 internal/impl/iceberg/cow_amplification_bench_test.go 中的TestCOWRecordFactoryMemory驱动。环境为 Apple M3 Pro 本地文件系统 进程内 harness数据集为每行 256 B payload 的合成行。metricper rowat 100k rowsretained during the commit~700 B~68 MBtransient allocation churn (GC-reclaimed)~4.25 kB~405 MB关键观察keyed 批次在提交期间整体物化为一个 Arrow 记录。选型建议选择batching.count时要把批次物化大小此 payload 下约 700 B/行常驻计入进程内存预算瞬态分配会被 GC 回收但在低核数下会增加 CPU 压力。Databricks Unity Catalog — Append 吞吐量 vs 每提交记录数在真实 Databricks Unity Catalog 上测量单写入者的持续 append 吞吐变化每次提交的记录数。harness 与运行说明见 internal/impl/iceberg/e2e/databricks/前置条件包括 Premium 及以上工作区、serverless SQL warehouse、开启 metastore external access以及客户自持 S3 存储。测试通过 Databricks Iceberg REST 端点写入并经 serverless SQL warehouse 的 SQL Statement Execution API 读回校验。环境Databricks Unity Catalogserverless workspaceIceberg REST 端点 客户自持 S3us-east-1单写入者。数据集为 ~1.2 kB 高熵 JSON 记录每个数据点 3 分钟墙钟窗口112 次提交零错误。records/commitsustained rec/seccommit p50commit p95commits/min300575.17s5.97s11.55,0008465.94s6.33s10.250,0007,2866.72s7.44s8.7200,00020,5959.65s10.36s6.2关键观察该 catalog 上纯 append 的提交地板价约 5.2sp50对比 AWS Glue 约 320ms且在 667x 的批规模范围内几乎持平——因此记录数/提交直接主导吞吐与本地基准的预测完全一致。直到 200k 记录/提交都没有吞吐拐点吞吐在整个扫描区间持续随批规模增长。Databricks Unity Catalog — Copy-on-write 提交延迟针对同一真实 catalog 的 copy-on-write upsert 提交延迟每种批规模测 3 次由 internal/impl/iceberg/e2e/databricks/ 中 flag 门控的TestDatabricksE2E_CommitLatencyBench驱动。环境同上数据集 ~1.2 kB 高熵 JSON 记录单写入者。records/commitcommit wall time (3 runs)throughput10010.0s / 8.1s / 6.7s10–15 rec/sec1,0009.0s / 7.4s / 7.8s111–135 rec/sec5,0009.7s / 6.9s / 6.7s516–741 rec/sec关键观察墙钟时间由固定的每次提交开销主导——批次增大 50 倍提交时间基本不变因此吞吐随批规模近似线性增长。与 append 一致应在内存允许的范围内尽量提高每提交记录数参见上文 copy-on-write 内存章节。复现途径本地基准配置在 internal/impl/iceberg/bench/真实 catalog harness 在 internal/impl/iceberg/e2e/databricks/。Shredder 分配优化2026-08-20记录分片shredding将 JSONmap[string]any转为列式 parquet 值原先为支持大小写不敏感的键匹配对每个结构每条记录构建了两张 map。大小写敏感匹配是默认行为case_sensitive_columns: true见 internal/impl/iceberg/config.go使这两张 map 变得冗余因此现在有了专用路径直接查找字段并在每个输入键都得到归属时跳过未知字段扫描。由 internal/impl/iceberg/bench/ 中的BenchmarkShredWide驱动——这是一个宽 schema 分片微基准镜像性能剖析管线的记录形状而无需搭建基础设施。环境darwin/arm64Apple M3 ProGOMAXPROCS1Go benchmarkn8 经 benchstat 统计。变更大小写敏感分片路径无配置或行为变化。metricbeforeafterdeltasec/op4.369µs1.472µs-66.3%(p0.000)B/op4.312 KiB1.609 KiB-62.7%(p0.000)allocs/op7141-42.3%(p0.000)各子基准 sec/opdeclared_schemafalse4.304µs → 1.394µs-67.6%declared_schematrue4.435µs → 1.555µs-64.9%。关键观察这是分片器单独测的结果不是 sink 级数字。此前的 1 vCPU 剖析显示分片约占 sink CPU 的 27%因此端到端效果应当可观但远小于 66%。该变更尚未做端到端测量——本文其他任何吞吐数字都没有为该变更重新运行。两个declared_schema变体前后都在噪声范围内与此前schema_metadata旋钮不会绕过 decode、shredding 或 encode的发现一致。复现GOMAXPROCS1 go test -bench BenchmarkShredWide -benchmem -run ^$ -count8 ./internal/impl/iceberg/bench/Commit Regime — 提交延迟 vs max_in_flight合成测试测量提交合并coalescing如何响应 catalog 提交延迟与并发提交数由 internal/impl/iceberg/commit_regime_bench_test.go 中 flag 门控的TestCommitRegimeSweep驱动。环境darwin/arm64Apple M3 Pro内存 catalog 固定注入的每提交延迟每点 6s 窗口每次提交 300 条记录。注意——请把数字当比值读而不是吞吐量。此处不写 parquet、不碰对象存储注入的延迟也不是真实 catalog因此绝对 rec/sec 不是 sink 吞吐数字与本地或真实 catalog 章节不可比。该 harness 测量的是一次提交承载多少个 submission以及对应的延迟。commit latencymax_in_flightrec/secrecords/commitsubmissions/commit50ms15,2383001.0050ms410,4376002.0050ms1641,7902,4008.0050ms64166,3069,60032.00200ms11,4493001.00200ms42,8966002.00200ms1611,5632,4008.00200ms6446,2309,60032.00500ms15913001.00500ms41,1876002.00500ms164,4162,2387.46500ms6420,35410,33834.46关键观察提交批处理器已经在合并并发 submission。提交进行期间到达的 submission 会并入下一次提交因此 records/commit 随max_in_flight增长且不涉及任何基于时间的批处理。max_in_flight: 1时 records/commit 被钉死在单次 submission得到records-per-submission / commit-latency——500ms 延迟下为 591 rec/sec正是下文调优配方中描述的吞吐陷阱形态。这是结构性的唯一的提交者阻塞在它所等待的提交内部因此不可能存在第二个可参与合并的 submission。提交侧加入 linger 无法改善此情形反而会给它增加延迟。submissions/commit 稳定在接近max_in_flight / 2而非max_in_flight暗示批处理器在刚释放的提交者全部重新入队前就采样了队列。缩小该差距是否值得尚未测试。复现go test -v -run TestCommitRegimeSweep -iceberg.commit-regime -timeout 20m ./internal/impl/iceberg/追加-iceberg.commit-regime-realistic可测 320ms/5s/10s 延迟。-v是必需的——扫描从不断言因此总是通过而go test会抑制通过用例的t.Log输出表格正是通过它打印的。写路径吞吐量 — Shredder 变更的端到端表现sink 写路径直接驱动容器化 MinIO Iceberg REST由 internal/impl/iceberg/integration/ 中 flag 门控的TestWriteThroughput驱动。测量覆盖 JSON decode、分片、parquet encode、上传与 catalog 提交压缩固定为uncompressed以便只有分片器不同。环境darwin/arm64Apple M3 ProMinIO apache/iceberg-rest-fixture同机容器运行每批 5,000 条记录每点 n1。变更大小写敏感分片路径与回退该变更的同一代码对比。schemacoresrecordsbefore (rec/s)after (rec/s)5 columns1200,000123,599120,1855 columns4200,000133,732133,62150 columns1100,00038,132 / 36,18237,314 / 36,508关键观察无论 schema 宽度还是核数均无可测的端到端收益。该变更的独立分片基准是 66% 的降幅但此处完全看不到。50 列两次重复运行正是因为这个差异落在运行间方差之内。最可能的解读是该 harness 不受分片器限制。即使在 50 列下这里的每条记录时间也由 parquet encode、上传和提交主导此前驱动该变更的剖析46% JSON decode、27% 分片来自真实二进制下的完整管线运行而不是这个接缝。这里的GOMAXPROCS1应理解为写入者一个核而非 1-vCPU 部署。MinIO 和 catalog 以容器形式运行在宿主机各自的核上且循环中没有 benthos 输入或 pipelineCPU 构成不同于受限容器内运行整套系统的场景。对分片变更的结论独立收益扎实可测但其在这些工作负载上的端到端价值未被证明。它降低了剖析显示约占 sink CPU 四分之一的组件中的每记录分配与 CPU 消耗该收益在 sink 层是否可见取决于工作负载其余部分的时间花在哪里——在这两种记录形状上不可见。复现 5 列TESTCONTAINERS_RYUK_DISABLEDtrue go test ./internal/impl/iceberg/integration/ -run TestWriteThroughput -timeout 25m -iceberg.throughput -iceberg.throughput.records200000 -iceberg.throughput.codecuncompressed。50 列则降低记录数追加-iceberg.throughput.columns45 -iceberg.throughput.records100000。写路径吞吐量 — 压缩编解码器同一 harness变化表的write.parquet.compression-codec属性。每点 100,000 条记录n1。harness 会从写入文件的 footer 读回 codec 并校验是否为请求值因此每一行都是该 codec 的真实测量。变更首次测量parquet.compression字段的 codec。记录形状比什么都重要因此两种都给出。regular 约 90 Bid 连续info字符串共享 21 字符前缀high-entropy 每条记录用 1,100 个全新随机字符填充info。payloadcodecrec/s (4 cores)rec/s (1 core)bytes/recordregularuncompressed120,693116,52457.2regularsnappy128,934114,26114.7regularzstd129,081119,4333.9high-entropyuncompressed46,39642,9941,151.4high-entropysnappy46,089—1,130.8high-entropyzstd45,15243,2091,124.4关键观察压缩没有带来值得报告的吞吐代价单核下亦然。两种 payload、两个核数下各 codec 与 uncompressed 相差都在几个百分点内且方向不定——zstd 有两次名义上还是最快的行。任何低核数下压缩会显著损失吞吐的预期都不被这些数字支持。体积收益完全取决于数据。可压缩形状下 zstd 比 uncompressed 小14.7 倍57.2 → 3.9 bytes/recordsnappy 小 3.9 倍真正随机的内容两者都只省约 2%因为没什么可压缩。Parquet 的字典与 byte-array 编码先于任何 codec 运行重复列本身已经很紧凑codec 增益有限收益存在于非随机的高熵列中——这两种形状都不代表该情形。本地对象存储低估了压缩的价值。此处上传到同机容器省下的字节买不到对远程端点的那么多时间。但权衡方向不会反转。上述全部注意每点 n1、单机、无重复——按数量级和方向读不要当作精确数字。看表前值得了解的默认值通过 Iceberg Go 库创建的表——包括此输出自己创建的表——创建时会带上write.parquet.compression-codec: zstd属性。由于未设置的parquet.compression会延后到表属性这类表实际得到zstd而非仅当表属性缺失时才生效的 uncompressed 默认。上面的 uncompressed 行需要显式设置属性才能得到。该解析顺序与 copy-on-write 的注意事项在 internal/impl/iceberg/config.go 的 Data file compression 文档中有完整描述优先用表属性设置压缩因为parquet.compression只作用于该输出直接写入的文件而 Iceberg 库的额外写入copy-on-write 重写、equality-delete 文件只跟随表属性默认 zstd——parquet.compression适用于无法设置表属性的场景例如 Databricks Unity Catalog。复现TESTCONTAINERS_RYUK_DISABLEDtrue go test ./internal/impl/iceberg/integration/ -run TestWriteThroughput -timeout 25m -iceberg.throughput -iceberg.throughput.records100000 -iceberg.throughput.codeczstd|snappy|uncompressed -iceberg.throughput.payloadregular|high-entropy。调优配方影响iceberg吞吐的单一最重要因素是记录数/提交records per commit。每次 catalog 提交都是固定成本的往返因此每次提交携带的行越多吞吐越高——而默认的小而频繁提交就是吞吐陷阱。下面的旋钮都指向同一个目标让每次提交携带大批量大约是一个提交间隔的数据量。输出侧旋钮适用于任何源batching—— 在每次写/提交前累积行。更大的批次 更少的提交 大幅提升吞吐见CPU 与批处理规模单核吞吐从batch1000到batch10000提升约 7 倍。批次规模按约 10 秒的数据量设置。max_in_flight默认4—— 并发提交数。提高它让提交并行进行并让提交器把排队中的提交合并成更大的提交。一旦批次规模合理这就是最有效的旋钮见批处理与 max_in_flight从max_in_flight4到32约 4 倍收益。这些基准中的甜点batching.count10000、max_in_flight32。配方 A — 保序内存缓冲适用于必须保留跨分区顺序的场景。内存缓冲把快速输入与提交受限的输出解耦把大批量累积成单一合并流。buffer: memory: limit: 524288000 # 500 MiB按 吞吐量 x 提交间隔 设置 batch_policy: count: 10000 period: 10s output: iceberg: # ...catalog / storage / table... max_in_flight: 16 commit: max_snapshot_age: 24h # 保持快照过期开启见避免过度提交跨分区保序吞吐在单一合并流的天花板处达到平台。配方 B — 最大吞吐输入侧批处理无序适用于 sink 不要求跨分区顺序的场景对 Iceberg 通常可接受。在 Redpanda/Kafka 输入上启用按分区并行处理让多个分区流并发馈入输出。input: redpanda: topics: [your-topic] unordered_processing: enabled: true checkpoint_limit: 1024 batching: count: 10000 period: 10s output: iceberg: # ...catalog / storage / table... max_in_flight: 32放弃跨分区顺序但通过跨分区并行达到比缓冲配方更高的扩展上限。低核数技巧GOGC在 1–2 vCPU 下sink 被每条记录的分配 GC 主导JSON decode → 结构化 map → 分片。调高 Go 的 GC 阈值用内存换 CPU 并挽回吞吐——本地单 vCPU 测试中GOGC400在不改配置的情况下使已提交吞吐提升约 20–30%GOGC400 rpk connect run ./config.yaml这会增加常驻内存采用前请对照内存预算验证。避免过度提交除每次提交的往返外极高的提交频率还会膨胀表元数据每次提交都会重读完整表元数据文档该成本随快照数量上升。因此小而频繁的提交会付出复合罚金。优先更大批次并保持快照过期开启commit.max_snapshot_age默认24h见 internal/impl/iceberg/config.go让元数据在长跑中保持有界。如何复现这些基准本地基准generate → Iceberg无 Kafka与基础设施命令由 internal/impl/iceberg/bench/Taskfile.yaml 定义task infra:up # 启动 MinIO Iceberg REST catalogMinIO 控制台 :9001REST catalog :8181 task bench CORES4 BATCH5000 COUNT1000000 # 变化核数与批规模 task bench:mif CORES4 BATCH10000 MIF32 COUNT1000000 # 变化 max_in_flight task bench:shredder # 分片微基准无需基础设施 task infra:down # 停止并清理任务参数默认值CORES默认不限、BATCH默认 1000、MIF默认 4、COUNT默认 1,000,000generate 基准默认 0 即不限。bench:mif在 internal/impl/iceberg/bench/benchmark_config.yaml 基础上通过--set覆盖input.generate.count、output.iceberg.batching.count、output.iceberg.batching.period与output.iceberg.max_in_flight等字段底层输出配置与上述基准参数一一对应例如output.iceberg.storage.aws_s3.endpoint指向 MinIO、output.iceberg.catalog.url指向 REST catalog。Kafka 端到端对比Kafka Connect vs Redpanda Connect的 Docker Compose 与生产者在 internal/impl/iceberg/bench/kafka-connector/Databricks Unity Catalog 真实环境测试含task terraform:apply/task test/task bench/task throughput的完整前置条件与步骤见 internal/impl/iceberg/e2e/databricks/README.md。结论本仓库的 Iceberg 基准结果指向一个统一结论catalog 提交延迟是 Iceberg 写入路径的绝对瓶颈连接器本身在恰当的配置下可以线性扩展直到对象存储饱和。实践中优先做两件事——把batching.count提高到能携带约 10 秒数据量并把max_in_flight提升到 32 左右默认仅 4对 keyed 的 upsert/delete 工作负载在内存预算内尽量加大批次、按 identifier 键排序表以控制 copy-on-write 写放大并牢记max_in_flight: 1的保序约束。这些结论全部来自仓库内可复现的基准配置与测试用例读者可参照本文的复现命令在自身环境上验证。【免费下载链接】connectFancy stream processing made operationally mundane项目地址: https://gitcode.com/GitHub_Trending/con/connect创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表