Jon*_*anW 6 google-cloud-platform google-cloud-pubsub google-cloud-dataflow
我正在设置一个简单的概念证明来学习 Google Cloud 中的一些概念,特别是 PubSub 和 Dataflow。
我有一个 PubSub 主题 greeting
我创建了一个简单的云函数,用于向该主题发送发布消息:
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}`);
};
Run Code Online (Sandbox Code Playgroud)
我设置了一个由主题触发的不同云函数:
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);
};
Run Code Online (Sandbox Code Playgroud)
这很好用,我看到它注册为该主题的订阅。
现在我想发送使用 Dataflow 将数据发送到 BigQuery
似乎有 2 个模板可以完成此操作:
在这种情况下,我不明白主题和订阅之间的区别。
https://medium.com/google-cloud/new-updates-to-pub-sub-to-bigquery-templates-7844444e6068有点亮:
请注意,对主题使用订阅的警告是订阅只能读取一次,而主题可以多次读取。因此一个订阅模板不能支持多个并发管道读取同一个订阅。
但我必须说我仍然无法理解这的真正含义。
小智 12
如果您使用 Topic to BigQuery 模板,Dataflow 将在幕后为您创建一个订阅,该订阅从指定的主题中读取。如果您使用订阅 BigQuery 模板,则需要提供自己的订阅。
您可以使用 Subscription to BigQuery 模板通过创建多个订阅连接 BigQuery 管道从同一主题读取来模拟 Topic to BigQuery 模板的行为。
对于新部署,首选使用 Subscription to BigQuery 模板。如果您使用 Topic to BigQuery 模板停止并重新启动管道,则会创建新订阅,这可能会导致您错过管道关闭时发布的某些消息。Subscription to BigQuery 模板没有这个缺点,因为即使在管道重新启动后它也使用相同的订阅。
| 归档时间: |
|
| 查看次数: |
1367 次 |
| 最近记录: |