你好,我正在尝试运行一个作业,从GCP外部托管的kafka中读取一些事件,使用数据流,该作业在VPC网络上运行。
问题是kafka被配置为用主机名而不是ip来回答,因此在bootstrap中指定ip会导致在数据流上运行作业时连接到目标节点失败。
Reader-1: Timeout while initializing partition 'placeholder'. Kafka client may not be able to connect to servers.
另一方面,如果我用kafka创建一个VM,并在etc/host
中指定映射主机名-ip,我可以正确地使用。
为了使它在Dataflow上工作,我试图用DNS name = .
创建一个私有云DNS,这允许我创建一个区域,在那里我可以将每个条目DNS name = nodename1.
中的主机映射到data = IP1
。
这似乎可以工作,因为我能够在虚拟机上telnet nodename1
,我没有指定在etc/host
中的映射。
然而,作业在开始时卡住了,我得到的唯一错误是:
"Timeout in polling result file: gs://placeholder/staging,zone=europe-central2-a/template_launches/2021-09-28_01_43_38-12780367774525067695/operation_result.
Possible causes are:
1. Your launch takes too long time to finish. Please check the logs on stackdriver.
2. Service account placeholder@placeholder may not have enough permissions to pull container image gcr.io/dataflow-templates/2021-09-20-00_rc00/kafka-to-bigquery or create new objects in gs://placeholder.
3. Transient errors occurred, please try again."
是否有一种简单的方法将主机映射到ip用于数据流中的作业?
我明白了。
正确的方法是不要用DNS name=.
创建一个区域,因为这将意味着解析每个域GCP将查看该区域,除了我创建的name-ip
条目外,找不到任何其他内容。由于Dataflow worker在内部查询169.254.169.254,该查询被转发到我创建的区域,无法解析,导致作业挂起。
正确的方法是为每个kafka "nodename"与DNS name = nodename.
,然后映射一个条目nodename.-ip
。
通过对每个引导的节点名重复此操作,数据流无法自动解析,它能够正确地从kafka主题中消费。