GCP DataFlow Kafka 到 BigQuery 的 DNS 映射

DNS mapping for GCP DataFlow Kafka to BigQuery

你好,我正在尝试 运行 使用数据流从托管在 GCP 外部的 kafka 读取一些事件的作业,该作业是 运行 在 VPC 网络上。

问题是 kafka 配置为使用主机名而不是 IP 进行应答,因此在 bootstrap 中指定 ips 会导致在 运行 在数据流上运行作业时无法连接到目标节点。

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 中指定映射的 VM 上

但是作业在开始时卡住了,我得到的唯一错误是:

"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 工作人员在内部查询 169.254.169.254,这被转发到我创建的区域并且无法解析,导致作业挂起。

正确的方法是使用 DNS name = nodename. 为每个 kafka“nodename”创建一个区域,然后映射一个条目 nodename.-ip.

通过对引导的每个节点名重复此操作,数据流无法自动解析,我能够正确地使用 kafka 主题。