如何使用BEAM的外部Kafka变换(本地)消费消息

我正在尝试运行一个应用程序,该应用程序使用Kafka生产者(Python客户端)和一个阿帕奇光束管道,它(目前)只是通过将这些消息打印到STDOUT来使用它们。

我了解,将Kafka外部转换与ApacheBEAM一起使用是一项跨语言的工作,因为它调用Java外部服务。我遵循了following link's选项1:

选项1:使用默认扩展服务

这是使用Python时推荐且最简单的设置选项 卡夫卡会变身。此选项仅适用于光束2.22.0和 稍后。

此选项要求在运行梁之前满足以下前提条件 管道。

在管道所在的计算机上安装Java运行时 构造并确保‘Java’命令可用。

我正在运行apache-beam==2.31.0,刚刚安装了Java:

openjdk 11.0.11 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.18.04)
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.18.04, mixed mode, sharing
我不完全确定我应该使用哪个Runner,因为portability documentation似乎指向Universal Local Runner,但我似乎找不到这个Runder 在documentation中。

以下是我正在尝试实现的代码示例:

import argparse
import apache_beam as beam
from helpers import ccloud_lib

from apache_beam.io.external.kafka import ReadFromKafka
from apache_beam.options.pipeline_options import PipelineOptions


def run(argv=None):
    """Main entry point; runs a word_count pipeline"""

    parser = argparse.ArgumentParser()
    parser.add_argument(
        "--input_topic",
        dest="input_topic",
        default="wordcount",
        help="Kafka topic to use for input",
    )
    parser.add_argument(
        "--kafka_config",
        dest="config_file",
        default="config/confluent/python.config",
    )

    args = parser.parse_known_args(argv)[0]
    beam_options = PipelineOptions(runner="DirectRunner")

    consumer_conf = ccloud_lib.read_ccloud_config(args.config_file)
    consumer_conf["group.id"] = "python_wordcount_group_1"
    consumer_conf["auto.offset.reset"] = "earliest"

    with beam.Pipeline(options=beam_options) as pipeline:
        pipeline
        | "Read"
        >> ReadFromKafka(
            consumer_config=consumer_conf,
            topics=[args.input_topic],
        )
        | "Print" >> beam.Map(print)

我启动了该模块,但我并不完全理解它是如何工作的,因为似乎下载了一些Java构件并启动了一个docker图像。然后我收到以下警告消息:

INFO:apache_beam.runners.portability.fn_api_runner.worker_handlers:b'2021/08/25 14:38:05 Failed to obtain provisioning information: failed to dial server at localhost:36071
	caused by:
context deadline exceeded
'
总结一下我的问题,您能解释一下当我启动脚本时发生了什么吗?我应该用哪一个跑步者来做这件事?我如何修复此问题?

Runner

我认为Universal Runner位于apache_beam.runners.portability.portable_runner.

相关文章