我使用Flink 1.7仪表板并选择流媒体作业。这应该向我展示一些指标,但它仍然需要加载。
我在Flink 1.5集群中部署了相同的工作,我可以查看指标。 Flink正在docker swarm中运行,但如果我在docker-compose中运行Flink 1.7(不在swarm中),它可以运行
我可以这样做,删除docker-compose.yaml文件中的主机名
version: "3"
services:
jobmanager17:
image: flink:1.7.0-hadoop27-scala_2.11
hostname: "{{.Node.Hostname}}"
ports:
- "8081:8081"
- "9254:9249"
command: jobmanager
....
我删除了主机名:
version: "3"
services:
jobmanager17:
image: flink:1.7.0-hadoop27-scala_2.11
ports:
- "8081:8081"
- "9254:9249"
command: jobmanager
....
现在指标有效,但没有主机名......
两者都有可能吗?
PD:我读过有关'分离模式'的内容......但我不使用它
我想你正在Kubernetes或docker swarm上运行你的集群。使用Kubernetes上的Flink 1.7,您需要确保任务管理器使用其IP地址而不是主机名向作业管理器注册。如果你查看jobmanagers日志,你会发现很多警告,无法联系到Taskmanager。
你可以通过传递定义taskmanager.host
参数来做到这一点。示例部署可能如下所示:
apiVersion: extensions/v1beta1
kind: Deployment
....
spec:
template:
spec:
containers:
- name: "<%= name %>"
args: ["taskmanager", "-Dtaskmanager.host=$(K8S_POD_IP)"]
env:
- name: K8S_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
如果您没有在K8上运行,可能值得尝试手动传递此参数(通过提供可从作业管理器作为qazxsw poi访问的IP地址)
希望有所帮助。
更新:Flink 1.8解决了这个问题。属性taskmanager.host
默认设置为“ip”,它或多或少与上述解决方法相同(taskmanager.network.bind-policy
)