Google Cloud数据流丢弃邮件

时间:2017-08-30 08:43:45

标签: java google-cloud-platform google-cloud-dataflow google-cloud-pubsub

我有以下应用程序运行数据管道并侦听Google pubsub:

配置:

<dependency>
    <groupId>org.apache.beam</groupId>
    <artifactId>beam-sdks-java-core</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>org.apache.beam</groupId>
    <artifactId>beam-runners-google-cloud-dataflow-java</artifactId>
    <version>2.0.0</version>
</dependency>

代码:

Pipeline p = //Initialise pipeline
p.apply("read messages", readMessage())
    .apply("log message", logMessage())

private static PubsubIO.Read<String> readMessage() {
    return PubsubIO.readStrings()
        .fromSubscription("my_subscription");
}

//Log message just logs the message

我遇到了一个问题,即消息被间歇性地丢弃(即它们没有从pubsub进入数据流管道)。为了调试,我写了另一个应用程序并使它听同一个pubsub。以下是配置:

配置:

<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-pubsub</artifactId>
    <version>0.22.0-beta</version>
</dependency>

<dependency>
    <groupId>com.google.apis</groupId>
    <artifactId>google-api-services-pubsub</artifactId>
    <version>v1-rev358-1.22.0</version>
</dependency>

代码:

@Component
public class PubsubMessageReceiver implements MessageReceiver{

    private static Logger logger = LoggerFactory.getLogger(PubsubMessageReceiver.class);

    @Override
    public void receiveMessage(PubsubMessage message, AckReplyConsumer consumer) {
        logger.info(message.getData().toStringUtf8());
        consumer.ack();
    }
}

我让它运行了几个小时(通过创建一个新的订阅来监听与原始应用程序相同的主题),检查日志文件并找到一些没有进入数据流管道的消息。

现在,这是间歇性的,我无法重现它(即使进行负载测试)。这与谷歌的光束库(看起来像竞争条件或类似情况)有什么关系吗?如果是,有人知道是否可以通过更改配置/更新版本来解决这个问题吗?

0 个答案:

没有答案