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