Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform GCP Pubsub中的消息丢失和重复_Google Cloud Platform_Google Cloud Dataflow_Google Cloud Pubsub_Apache Beam - Fatal编程技术网

Google cloud platform GCP Pubsub中的消息丢失和重复

Google cloud platform GCP Pubsub中的消息丢失和重复,google-cloud-platform,google-cloud-dataflow,google-cloud-pubsub,apache-beam,Google Cloud Platform,Google Cloud Dataflow,Google Cloud Pubsub,Apache Beam,我在从Dataflow读取GCP PubSub时遇到了一个问题,当在短时间内发布大量消息时,Dataflow将接收大部分发送的消息,除了一些消息将丢失,一些其他消息将被复制。最奇怪的是,丢失的消息数量与被复制的消息数量完全相同 在其中一个示例中,我在5秒内发送了4000条消息,总共收到了4000条消息,但有9条消息丢失,而有9条消息被复制 我确定重复项的方法是通过日志记录。我正在记录发布到Pubsub的每条消息以及Pubsub生成的消息id。我还在Pardo转换中读取PubsubIO后立即记录消

我在从Dataflow读取GCP PubSub时遇到了一个问题,当在短时间内发布大量消息时,Dataflow将接收大部分发送的消息,除了一些消息将丢失,一些其他消息将被复制。最奇怪的是,丢失的消息数量与被复制的消息数量完全相同

在其中一个示例中,我在5秒内发送了4000条消息,总共收到了4000条消息,但有9条消息丢失,而有9条消息被复制

我确定重复项的方法是通过日志记录。我正在记录发布到Pubsub的每条消息以及Pubsub生成的消息id。我还在Pardo转换中读取PubsubIO后立即记录消息

我在数据流中读取Pubsub的方式是使用
org.apache.beam.sdk.iopusubio

公共接口选项扩展了GcpOptions、DataflowPipelineOptions{
//PUBSUB URL
@说明(“发布子URL”)
@默认值。字符串(“https://pubsub.googleapis.com")
字符串getPubSubrotUrl();
void setPubSubrotUrl(字符串值);
//话题
@说明(“主题”)
@Default.String(“项目/测试项目/主题/测试主题”)
字符串getTopic();
void setTopic(字符串值);
...
}
公共静态void main(字符串[]args){
Options Options=PipelineOptionsFactory.fromArgs(args).withValidation().as(Options.class);
选项。设置流(true);
options.setRunner(DataflowRunner.class);
...
Pipeline=Pipeline.create(选项);
管道。应用(PubsubIO)
.读()
.topic(options.getTopic())
.withCoder(StringUtf8Coder.of())
)
.apply(“记录数据来自Pubsub”,ParDo
.of(某些\u日志记录\u转换)
)
.apply(“将数据保存到数据库”,ParDo
.of(某些输出转换)
)
;
pipeline.run().waitUntilFinish();
}
我想知道这是Pubsub还是PubsubIO中的已知问题

更新: 使用pubsub emulator尝试了4000个请求,没有丢失数据,也没有重复

更新#2:

我又做了一些实验,发现重复的消息从丢失的消息中提取了
message\u id
。因为这个问题的方向已经偏离了它的起源,所以我决定发布另一个问题,包括详细的日志以及我用来发布和接收消息的代码。
链接到新问题:

我和PubSub团队的一个谷歌人谈过。这似乎是由Python客户端的线程安全问题引起的。请参考谷歌的回复,你能分享管道的工作ID吗?谢谢你的回复。我制作了一个简单的管道,它使用pubsbuIO读取pubsub,解析成对象,保存到一个Neo4j数据库。在发送3000个请求的快速运行中,13个丢失,13个重复。作业id为2017-05-24_08_46_18-1297374047328352490如何确定重复消息与丢失消息?在我的设置中,发送到pubsub的每条消息本质上都是一个假用户会话,会话id递增。从PubsubIO读取后,我记录了在PubsubIO之后的第一次转换期间收到的所有消息,然后将消息转储到数据库中。通过比较收到的每条消息的会话id,我可以列出与多条消息关联的所有会话id。由于会话id每次递增1,我可以跟踪丢失的id,所以您通过日志确定重复的id?ParDos可以被重新执行,因此这并不一定意味着存在重复项