Python ReadFromKafka抛出值错误:不支持的信号:2

Python ReadFromKafka抛出值错误:不支持的信号:2,python,apache-kafka,apache-beam,apache-beam-io,Python,Apache Kafka,Apache Beam,Apache Beam Io,目前,我试图与ApacheKafka一起掌握ApacheBeam的诀窍 Kafka服务正在(本地)运行,我使用Kafka控制台生成器编写了一些测试消息 首先,我编写了这个Java代码片段,用我熟悉的语言测试ApacheBeam。它的工作原理与预期一致 public class Main { public static void main(String[] args) { Pipeline pipeline = Pipeline.create(); Read<Lon

目前,我试图与ApacheKafka一起掌握ApacheBeam的诀窍

Kafka服务正在(本地)运行,我使用Kafka控制台生成器编写了一些测试消息

首先,我编写了这个Java代码片段,用我熟悉的语言测试ApacheBeam。它的工作原理与预期一致

public class Main {

  public static void main(String[] args) {

    Pipeline pipeline = Pipeline.create();

    Read<Long, String> kafkaReader = KafkaIO.<Long, String>read()
        .withBootstrapServers("localhost:9092")
        .withTopic("beam-test")
        .withKeyDeserializer(LongDeserializer.class)
        .withValueDeserializer(StringDeserializer.class);

    kafkaReader.withoutMetadata();

    pipeline
        .apply("Kafka", kafkaReader
        ).apply(
          "Extract words", ParDo.of(new DoFn<KafkaRecord<Long, String>, String>() {
            @ProcessElement
          public void processElement(ProcessContext c){
              System.out.println("Key:" + c.element().getKV().getKey() + " | Value: " + c.element().getKV().getValue());
            }
        })
    );

    pipeline.run();
  }
}
现在来谈谈问题。当我尝试运行python代码时,出现以下错误:

(app) λ python ArghKafkaExample.py 
Traceback (most recent call last):
  File "ArghKafkaExample.py", line 22, in <module>
    run_pipe()
  File "ArghKafkaExample.py", line 10, in run_pipe
    (p
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\transforms\ptransform.py", line 1028, in __ror__
    return self.transform.__ror__(pvalueish, self.label)
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\transforms\ptransform.py", line 572, in __ror__
    result = p.apply(self, pvalueish, label)
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\pipeline.py", line 648, in apply
    return self.apply(transform, pvalueish)
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\pipeline.py", line 691, in apply
    pvalueish_result = self.runner.apply(transform, pvalueish, self._options)
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\runners\runner.py", line 198, in apply
    return m(transform, input, options)
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\runners\runner.py", line 228, in apply_PTransform
    return transform.expand(input)
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\transforms\external.py", line 322, in expand
    self._expanded_components = self._resolve_artifacts(
  File "C:\Users\gamef\AppData\Local\Programs\Python\Python38\lib\contextlib.py", line 120, in __exit__
    next(self.gen)
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\transforms\external.py", line 372, in _service
    yield stub
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\transforms\external.py", line 523, in __exit__
    self._service_provider.__exit__(*args)
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\utils\subprocess_server.py", line 74, in __exit__
    self.stop()
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\utils\subprocess_server.py", line 133, in stop
    self.stop_process()
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\utils\subprocess_server.py", line 179, in stop_process
    return super(JavaJarServer, self).stop_process()
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\utils\subprocess_server.py", line 143, in stop_process
    self._process.send_signal(signal.SIGINT)
  File "C:\Users\gamef\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 1434, in send_signal
    raise ValueError("Unsupported signal: {}".format(sig))
ValueError: Unsupported signal: 2
(app)λpython ArghKafkaExample.py
回溯(最近一次呼叫最后一次):
文件“arghkafakaexample.py”,第22行,在
管道
管路中第10行的文件“ArghKafkaExample.py”
(p
文件“C:\Users\gamef\git\beamescotty\app\lib\site packages\apache\u beam\transforms\pttransform.py”,第1028行,错误__
返回self.transform.\uuuuror\uuuuuuu(pValue,self.label)
文件“C:\Users\gamef\git\beamescotty\app\lib\site packages\apache\u beam\transforms\pttransform.py”,第572行,错误__
结果=p.apply(self、pvaluelish、label)
文件“C:\Users\gamef\git\beamescotty\app\lib\site packages\apache\u beam\pipeline.py”,第648行,在apply中
返回self.apply(transform,pvalueish)
文件“C:\Users\gamef\git\beamescotty\app\lib\site packages\apache\u beam\pipeline.py”,第691行,在apply中
pvalueish_结果=self.runner.apply(转换、pvalueish、self._选项)
文件“C:\Users\gamef\git\beamescotty\app\lib\site packages\apache\u beam\runners\runner.py”,第198行,在apply中
返回m(变换、输入、选项)
文件“C:\Users\gamef\git\beamescotty\app\lib\site packages\apache\u beam\runners\runner.py”,第228行,在apply\u PTransform中
返回transform.expand(输入)
文件“C:\Users\gamef\git\beamescotty\app\lib\site packages\apache\u beam\transforms\external.py”,第322行,展开
self.\u扩展的\u组件=self.\u解析\u工件(
文件“C:\Users\gamef\AppData\Local\Programs\Python\Python38\lib\contextlib.py”,第120行,在退出时__
下一个(self.gen)
文件“C:\Users\gamef\git\beamescotty\app\lib\site packages\apache\u beam\transforms\external.py”,第372行,在\u服务中
产量存根
文件“C:\Users\gamef\git\beamescotty\app\lib\site packages\apache\u beam\transforms\external.py”,第523行,在\uuuu出口处__
自助服务提供商退出(*args)
文件“C:\Users\gamef\git\beamescotty\app\lib\site packages\apache\u beam\utils\subprocess\u server.py”,第74行,在退出中__
self.stop()
文件“C:\Users\gamef\git\beamescotty\app\lib\site packages\apache\u beam\utils\subprocess\u server.py”,第133行,在stop中
self.stop_进程()
文件“C:\Users\gamef\git\beamescotty\app\lib\site packages\apache\u beam\utils\subprocess\u server.py”,第179行,在stop\u进程中
返回super(JavaJarServer,self).stop_进程()
文件“C:\Users\gamef\git\beamescotty\app\lib\site packages\apache\u beam\utils\subprocess\u server.py”,第143行,在stop\u进程中
自处理发送信号(signal.SIGINT)
文件“C:\Users\gamef\AppData\Local\Programs\Python\Python38\lib\subprocess.py”,第1434行,在发送信号中
raise VALUERROR(“不支持的信号:{}”。格式(sig))
ValueError:不支持的信号:2
通过谷歌搜索我发现,这与程序退出代码(如Strg+C)有关,但总体而言,我完全不知道问题出在哪里

任何建议都会有帮助


您好Pascal

您的管道代码在这里似乎是正确的。此问题是由于Python SDK中Kafka IO的要求造成的。来自:

这些转换目前由Beam便携式runner(例如,便携式Flink和Spark)以及Dataflow runner支持

本模块中提供的转换是在Beam Java SDK中实现的跨语言转换。在管道构建过程中,Python SDK将连接到Java扩展服务以扩展这些转换。为方便起见,在Beam Python管道中使用这些转换之前,需要进行少量设置

Kafka IO在Python中作为Java中的跨语言转换实现,而您的管道正在失败,因为您尚未设置执行跨语言转换的环境。用外行的话说,解释什么是跨语言转换:这意味着Kafka转换实际上是在Java SDK而不是Python SDK上执行的,因此它可以利用Java上现有的Kafka代码

有两个障碍阻止管道工作。更容易修复的障碍是,只有我上面引用的运行程序支持跨语言转换,因此,如果您使用直接运行程序运行管道,它将无法工作,您需要在本地模式下切换到Flink或Spark运行程序

更棘手的障碍是,您需要启动扩展服务才能将外部转换添加到管道中。由于Beam试图扩展转换,但无法连接到扩展服务,并且扩展失败,因此发生了stacktrace


尽管有额外的设置,如果您仍想尝试使用跨语言运行此功能,我链接的文档包含运行扩展服务的说明。在我编写此答案时,此功能仍然是新功能,文档中可能存在盲点。如果您遇到问题,我鼓励您在t上提问he.

嗨,Daniel,将默认扩展服务添加为……扩展服务="localhost:8097出现以下错误:grpc.\u channel.\u inactioverpcerror:如果没有任何其他上下文,这很可能是端口问题。请确保您尝试使用的所有端口都是打开的。但是如果您需要更详细的帮助,我建议创建一个关于该错误的新堆栈溢出问题,并提供更多上下文,或者询问邮件列表/sl正如我上面建议的那样,确认频道。嗨,丹尼尔,
(app) λ python ArghKafkaExample.py 
Traceback (most recent call last):
  File "ArghKafkaExample.py", line 22, in <module>
    run_pipe()
  File "ArghKafkaExample.py", line 10, in run_pipe
    (p
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\transforms\ptransform.py", line 1028, in __ror__
    return self.transform.__ror__(pvalueish, self.label)
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\transforms\ptransform.py", line 572, in __ror__
    result = p.apply(self, pvalueish, label)
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\pipeline.py", line 648, in apply
    return self.apply(transform, pvalueish)
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\pipeline.py", line 691, in apply
    pvalueish_result = self.runner.apply(transform, pvalueish, self._options)
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\runners\runner.py", line 198, in apply
    return m(transform, input, options)
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\runners\runner.py", line 228, in apply_PTransform
    return transform.expand(input)
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\transforms\external.py", line 322, in expand
    self._expanded_components = self._resolve_artifacts(
  File "C:\Users\gamef\AppData\Local\Programs\Python\Python38\lib\contextlib.py", line 120, in __exit__
    next(self.gen)
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\transforms\external.py", line 372, in _service
    yield stub
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\transforms\external.py", line 523, in __exit__
    self._service_provider.__exit__(*args)
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\utils\subprocess_server.py", line 74, in __exit__
    self.stop()
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\utils\subprocess_server.py", line 133, in stop
    self.stop_process()
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\utils\subprocess_server.py", line 179, in stop_process
    return super(JavaJarServer, self).stop_process()
  File "C:\Users\gamef\git\BeamMeScotty\app\lib\site-packages\apache_beam\utils\subprocess_server.py", line 143, in stop_process
    self._process.send_signal(signal.SIGINT)
  File "C:\Users\gamef\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 1434, in send_signal
    raise ValueError("Unsupported signal: {}".format(sig))
ValueError: Unsupported signal: 2