如何使用单个事件中心名称空间处理多个数据源

Posted

技术标签:

【中文标题】如何使用单个事件中心名称空间处理多个数据源【英文标题】:How can I handle multiple sources of data with single event hub name space 【发布时间】:2019-09-12 10:59:38 【问题描述】:

我从 20-30 个 API 获取数据并将数据推送到事件中心,我需要在 Azure 流分析中以不同的方式处理来自事件中心的数据,那么如何 我可以使用 azure 流分析识别来自不同 API 或来源的数据吗? 我在我的代码中发送如下数据:

module.exports = async function (context, myTimer) 
    const   EventHubClient, EventData, EventPosition, OnMessage, OnError, MessagingError  = require("@azure/event-hubs");
    const connectionString = 'Endpoint=Connection string'
    var axios = require('axios')
    context.log('ssss')
    const client = EventHubClient.createFromConnectionString(connectionString);
    context.log('sssaaa')
    var response = await axios.get('https://nseindia.com/live_market/dynaContent/live_watch/stock_watch/nifty500StockWatch.json')
    // var sendBatchData = [
    //     body:response['data']['data']
    //     ]
    const datas = [
         body:  "message": "Hello World 1" , applicationProperties:  id: 1 , partitionKey: "pk786" ,
         body:  "message": "Hello World 2"  ,
         body:  "message": "Hello World 3"  
        ];
    // context.log(sendBatchData)
    await client.sendBatch(datas)
    context.log('message sent')
    // async function main():Promise<void> 


    // 

    // var timeStamp = new Date().toISOString();

    // if (myTimer.IsPastDue)
    // 
    //     context.log('javascript is running late!');
    // 
    // context.log('JavaScript timer trigger function ran!', timeStamp);   
;

但在天蓝色字符串分析网站上, 我得到如下数据:


    "message": "Hello World 3",
    "EventProcessedUtcTime": "2019-09-23T09:52:09.1421367Z",
    "PartitionId": 0,
    "EventEnqueuedUtcTime": "2019-09-23T09:51:38.8270000Z"
  ,
  
    "message": "Hello World 1",
    "EventProcessedUtcTime": "2019-09-23T09:52:08.6420937Z",
    "PartitionId": 0,
    "EventEnqueuedUtcTime": "2019-09-23T09:51:38.8270000Z"
  ,
  
    "message": "Hello World 2",
    "EventProcessedUtcTime": "2019-09-23T09:52:09.1421367Z",
    "PartitionId": 0,
    "EventEnqueuedUtcTime": "2019-09-23T09:51:38.8270000Z"
  
]

我没有看到任何重新镀到我的分区键上。 我的目标是,当我从多个 Api 源发送数据时,如何区分 Azure 流分析

提前致谢

【问题讨论】:

我需要在 Azure 流分析中处理来自事件中心的数据以不同方式 -> 你到底是什么意思? 请查看我更新后的查询@PeterBons @sarank 你好,我的回答对你有帮助吗? @PeterBons 请查看我更新的问题 【参考方案1】:

据我所知,ASA 事件中心流输入无法自动区分来自不同源 API 的数据。

两种方式供大家参考:

1.当您的 API 将数据推送到事件中心时,请将specify a value 设为PartitionId。然后可以查询ASA query中的分区id:

2.为所有API添加自定义统一列。如:SourceFlag: API1,API2,API3...,则可以根据ASA查询中的这个自定义列来区分数据。

【讨论】:

以上是关于如何使用单个事件中心名称空间处理多个数据源的主要内容,如果未能解决你的问题,请参考以下文章

如何在gke中为用户授予名称空间访问权限?

Kafka Connect 如何使命名空间与数据库名称无关

bind 事件名称 命名空间

读取具有多个名称空间的子节点

cicd怎么解决配置中心

如何使用 XSLT 向 XML 有效负载添加不同的名称空间