Google cloud dataflow apachebeam似乎正在截断pub-sub消息负载

Google cloud dataflow apachebeam似乎正在截断pub-sub消息负载,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我们已经为发布子事件处理创建了一个非常简单的管道。发布子消息负载本身是选项卡分隔的csv数据 读取消息后,当向事件对象充气时,有效负载数据将被截断。使用直接流道并在本地运行,管道端到端工作 只有在Google Cloud Dataflow runner中运行时,我们才能看到此消息数据被截断 // Create the pipeline Pipeline pipeline = Pipeline.create(options); LOG.info("

我们已经为发布子事件处理创建了一个非常简单的管道。发布子消息负载本身是选项卡分隔的csv数据

读取消息后,当向事件对象充气时,有效负载数据将被截断。使用直接流道并在本地运行,管道端到端工作

只有在Google Cloud Dataflow runner中运行时,我们才能看到此消息数据被截断

        // Create the pipeline
        Pipeline pipeline = Pipeline.create(options);

        LOG.info("Reading from subscription: " + options.getInputSubscription());

        //Step #1: Read from a PubSub subscription.
        PCollection<PubsubMessage> pubsubMessages = pipeline.apply(
            "ReadPubSubSubscription",
            PubsubIO.readMessagesWithMessageId()
                    .fromSubscription(options.getInputSubscription())
        );


        //Step #2: Transform the PubsubMessages into snowplow events.
        PCollection<Event> rawEvents = pubsubMessages.apply(
            "ConvertMessageToEvent",
            ParDo.of(new PubsubMessageEventFn())
        );

        // other pipeline functions.....

请注意,DirectRunner的发布/订阅实现与此处所述的Dataflow Runner中的实现不同

我认为问题与编码有关,因为
message.getPayload
的类型为
bytes
,代码可能需要修改为
新字符串(message.getPayload(),StandardCharsets.UTF_8)

Validated<ParsingError, Event> event = Event.parse(new String(message.getPayload(), StandardCharsets.UTF_8));
validatedevent=event.parse(新字符串(message.getPayload(),StandardCharsets.UTF_8));

请注意,DirectRunner的发布/订阅实现与此处所述的Dataflow Runner中的实现不同

我认为问题与编码有关,因为
message.getPayload
的类型为
bytes
,代码可能需要修改为
新字符串(message.getPayload(),StandardCharsets.UTF_8)

Validated<ParsingError, Event> event = Event.parse(new String(message.getPayload(), StandardCharsets.UTF_8));
validatedevent=event.parse(新字符串(message.getPayload(),StandardCharsets.UTF_8));

谢谢,尝试了一下,但不幸的是同样的问题。如果您没有在代码中的任何地方使用
MessageId
,您可以更改
PubsubIO吗。readMessagesWithMessageId
PubsubIO.readStrings()
。另外,您能告诉我您正在使用的scala库是什么吗?最后,最好看看
\t
对于
FieldNumberMismatch(5)
来说是否正确。我认为问题出在发布服务器端,messageId设置不正确,这会导致消息格式错误。您可以查看-以了解消息结构。使用readMessagesWithMessageId时,它需要messageId属性,而readMessages只需要消息负载。这里是定义-谢谢,尝试了一下,但不幸的是同样的问题。如果您没有在代码中的任何地方使用
MessageId
,您可以更改
publisubio吗。readMessagesWithMessageId
PubsubIO.readStrings()
。另外,您能告诉我您正在使用的scala库是什么吗?最后,最好看看
\t
对于
FieldNumberMismatch(5)
来说是否正确。我认为问题出在发布服务器端,messageId设置不正确,这会导致消息格式错误。您可以查看-以了解消息结构。使用readMessagesWithMessageId时,它需要messageId属性,而readMessages只需要消息负载。这里是定义-
Validated<ParsingError, Event> event = Event.parse(new String(message.getPayload(), StandardCharsets.UTF_8));