Шаблон потока данных Cloud Pub / Sub Topic против подписки на BigQuery - PullRequest
1 голос
/ 16 мая 2019

Я настраиваю простое Испытание концепции, чтобы изучить некоторые концепции в Google Cloud, в частности PubSub и Dataflow.

У меня есть тема PubSub greeting

I 'Мы создали простую облачную функцию, которая отправляет публикует сообщение в эту тему:

const escapeHtml = require('escape-html');
const { Buffer } = require('safe-buffer');
const { PubSub } = require('@google-cloud/pubsub');

exports.publishGreetingHTTP = async (req, res) => {
    let name = 'no name provided';
    if (req.query && req.query.name) {
        name = escapeHtml(req.query.name);
    } else if (req.body && req.body.name) {
        name = escapeHtml(req.body.name);
    }
    const pubsub = new PubSub();
    const topicName = 'greeting';
    const data = JSON.stringify({ hello: name });
    const dataBuffer = Buffer.from(data);
    const messageId = await pubsub.topic(topicName).publish(dataBuffer);
    res.send(`Message ${messageId} published. name=${name}`);
};

Я установил другую облачную функцию, которая запускается по теме:

const { Buffer } = require('safe-buffer');

exports.subscribeGreetingPubSub = (data) => {
    const pubSubMessage = data;
    const passedData = pubSubMessage.data ? JSON.parse(Buffer.from(pubSubMessage.data, 'base64').toString()) : { error: 'no data' };

    console.log(passedData);
};

Это прекрасно работаети я вижу, что он зарегистрирован как подписка на тему.

Теперь я хочу отправить использование Dataflow для отправки данных в BigQuery

Похоже, 2 шаблонадля этого:

Я не понимаю разницы между темой и подпиской в ​​этом контексте.

https://medium.com/google-cloud/new-updates-to-pub-sub-to-bigquery-templates-7844444e6068 проливает немного света:

Обратите внимание, чтоИспользование подписок по темам заключается в том, что подписки читаются только один раз, покаCS можно прочитать несколько раз.Поэтому шаблон подписки не может поддерживать несколько одновременных конвейеров, читающих одну и ту же подписку.

Но я должен сказать, что все еще потерян, чтобы понять реальные последствия этого.

1 Ответ

2 голосов
/ 24 мая 2019

Если вы используете шаблон Topic to BigQuery, Dataflow создаст для вас закулисную подписку, которая читает из указанной темы.Если вы используете шаблон «Подписка на BigQuery», вам нужно будет предоставить собственную подписку.

Вы можете использовать шаблоны «Подписка на BigQuery», чтобы эмулировать поведение шаблона «Тема в BigQuery» путем создания нескольких подключенных по подписке чтений конвейеров BigQuery для чтения.из той же темы.

Для новых развертываний предпочтительнее использовать шаблон Subscription to BigQuery.Если вы остановите и перезапустите конвейер, используя шаблон Topic to BigQuery, будет создана новая подписка, из-за которой вы можете пропустить некоторые сообщения, которые были опубликованы, когда конвейер не работал.Шаблон Подписка на BigQuery не имеет этого недостатка, поскольку использует ту же подписку даже после перезапуска конвейера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...