-
Notifications
You must be signed in to change notification settings - Fork 191
Open
Description
环境信息
- Flink version: 1.20.1
- StarRocks connector version: 1.2.11
- StarRocks version: 3.5.0 (allin1-ubuntu image)
- Environment: Docker Compose
- OS: Linux (WSL2)
问题描述
在Docker环境中使用StarRocks Flink连接器时,当配置'load-url' = 'starrocks:8030'(按照官方文档推荐配置),连接器会因为重定向处理失败而无法工作。
根本原因分析
通过源码分析发现,问题出现在StarRocks的HTTP重定向机制:
正常流程:客户端 → starrocks:8030 (FE) → FE重定向到BE节点
问题流程:FE重定向返回 Location: http://127.0.0.1:8040,而不是 http://starrocks:8040
结果:连接器尝试连接 127.0.0.1:8040 失败
- 复现步骤
services:
starrocks:
image: starrocks/allin1-ubuntu:3.5.0
ports:
- "8030:8030"
- "9030:9030"
- "8040:8040"
networks:
- flink-network
jobmanager:
image: custom-flink:1.20.1
depends_on:
- starrocks
networks:
- flink-network
- Flink SQL配置:
CREATE TABLE test_table (
id INT,
name STRING
) WITH (
'connector' = 'starrocks',
'jdbc-url' = 'jdbc:mysql://starrocks:9030',
'load-url' = 'starrocks:8030', -- 按官方文档配置
'database-name' = 'test_db',
'table-name' = 'test_table',
'username' = 'root',
'password' = '',
'sink.semantic' = 'at-least-once'
);
INSERT INTO test_table VALUES (1, 'test');
- 错误结果:
java.net.ConnectException: Connect to 127.0.0.1:8040 [/127.0.0.1] failed: Connection refused
错误堆栈
<details>
<summary>完整错误日志</summary>
org.apache.flink.runtime.JobException: Recovery is suppressed by NoRestartBackoffTimeStrategy
...
Caused by: java.net.ConnectException: Connect to 127.0.0.1:8040 [/127.0.0.1] failed: Connection refused
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156)
at com.starrocks.data.load.stream.DefaultStreamLoader.doHttpPut(DefaultStreamLoader.java:xxx)
网络连接验证
# DNS解析正常
$ nslookup starrocks
Name: starrocks
Address: 172.25.0.10
# 服务正常运行
$ curl -I http://starrocks:8030
HTTP/1.1 401 Unauthorized # 服务正常
临时解决方案
使用多个load-url地址可以解决:
源码分析
相关源码位置:
- StarRocksDynamicSinkFunctionV2.java:276 - 调用flush
- StreamLoadManagerV2.java - 管理stream load
- DefaultStreamLoader.java - HTTP重定向处理
问题点:
- HTTP客户端使用默认重定向策略,没有处理Docker环境下的主机名映射
- 重定向响应中的Location头使用了127.0.0.1而不是容器网络中的正确地址
建议修复方案
- 短期方案:在文档中说明Docker环境需要使用多load-url配置
- 长期方案:改进重定向处理逻辑
检测到127.0.0.1重定向时,替换为原始主机名
或者提供配置项让用户指定重定向主机映射
影响范围
- 所有使用Docker/Kubernetes等容器化环境的用户
- 按照官方文档配置但无法正常工作
期望行为
使用官方文档推荐的 'load-url' = 'starrocks:8030' 配置应该能够正常工作,无需额外配置。
提交建议:
- 在StarRocks Flink连接器的GitHub仓库提交
- 选择 "Bug report" 标签
- 可以同时在StarRocks主仓库提交相关issue,因为重定向逻辑可能在FE端
- 附上我们分析过程中的关键源码片段截图
- 这样的issue提交显示了您对问题的深度理解,有助于开发团队快速定位和修复问题。
Metadata
Metadata
Assignees
Labels
No labels