kafka接收mqtt数据_使用MQTT发送和接收下一个项目的数据

本文介绍了如何使用MQTT协议从纽约独立系统运营商(NYISO)获取实时燃料混合数据,并通过Kafka进行传输。文章讨论了MQTT的特性、为何选择MQTT以及如何构建数据流。此外,还展示了如何从命令行和Web界面访问MQTT数据,以及开源项目ny-power.org如何利用这些数据提供实时CO2强度和电网信息。
摘要由CSDN通过智能技术生成

kafka接收mqtt数据

去年11月,我们买了一辆电动汽车,这引起了一个有趣的问题:我们什么时候应该充电? 我担心汽车充电所用的排放量最低,所以这是一个具体的问题:在任何给定时间,每千瓦时的二氧化碳排放率是多少?白天是什么时候最低?

查找数据

我住在纽约州。 我们约80%的电力来自州内发电,主要来自天然气,水坝(其中大部分来自尼亚加拉大瀑布),核能以及一些风能,太阳能和其他化石燃料。 整个系统由纽约独立系统运营商 (NYISO)管理, 纽约独立系统运营商是一个非营利性机构,其成立目的是平衡发电机,消费者和监管机构的需求,以使纽约保持正常运转。

很多公开数据可供公众使用。 这包括报告整个州每五分钟间隔消耗什么燃料来发电。 这些文件以CSV文件的形式发布在公共档案馆中,并全天更新。 如果您知道来自不同种类燃料的兆瓦数,则可以合理估算任何给定时间排放的二氧化碳量。

在构建用于收集和处理开放数据的工具时,我们应该始终保持友善,以免使这些系统过载。 与其将所有人一直发送到他们的存档服务来下载文件,我们可以做得更好。 我们可以创建一个开销很小的事件流,人们可以订阅并随时获取更新。 我们可以使用MQTT做到这一点。 我的项目( ny-power.org )的目标是包含在Home Assistant项目中,该项目是一个拥有数十万用户的开源家庭自动化平台。 如果所有这些用户一直都在访问此CSV服务器,则NYISO可能需要限制对其的访问。

什么是MQTT?

MQTT是一种发布/订阅(pubsub)有线协议,其设计考虑了小型设备。 Pubsub系统的工作就像消息总线一样。 您将消息发送到主题,任何订阅该主题的软件都将获得消息的副本。 作为发送者,您永远不会真正知道谁在听。 您只需将信息提供给一组主题,然后聆听您可能关心的其他任何主题。 就像参加派对并听有趣的对话一样。

这可以使应用程序效率极高。 客户订阅的主题很窄,只接收他们正在寻找的信息。 这样既节省了处理时间,又节省了网络带宽。

作为一种开放标准,MQTT具有许多客户端和服务器的开源实现。 您可以想象到每种语言的客户端库,甚至可以嵌入到Arduino中的用于建立传感器网络的库。 有许多服务器可供选择。 我要去的是Eclipse的Mosquitto服务器,它很小,是用C编写的,可以处理成千上万的订户而不会费力。

为什么我喜欢MQTT

在过去的二十年中,我们为软件应用程序提出了经过验证的真实模型,以提出服务问题。 我还有电子邮件吗? 当前天气如何? 我现在应该买这东西吗? 这种“询问/接收”模式在很多时候都有效。 但是,在充满数据的世界中,我们还需要其他模式。 MQTT pubsub模型功能强大,可以将大量数据发布到系统中。 客户端可以订阅少量数据,并在收到数据后立即接收更新。

MQTT还具有其他有趣的功能,例如“最后遗嘱”消息,这使得可以区分由于没有相关数据而导致的静默和由于数据收集器崩溃而导致的静默。 MQTT还保留了消息,这些消息在客户端首次连接时将有关主题的最后一条消息提供给客户端。 这对于主题更新缓慢非常有用。

在与Home Assistant项目一起工作时,我发现此消息总线模型对于异构系统非常有效。 如果您进入物联网领域,那么您将很快在任何地方都遇到MQTT。

我们的第一个MQTT流

NYSO的CSV文件之一是实时燃料混合。 每五分钟更新一次该时间段内的燃料来源和发电量(兆瓦)。

CSV文件如下所示:

时标 时区 燃料类别 兆瓦
05/09/2018 00:05:00 美东时间 双燃料 1400
05/09/2018 00:05:00 美东时间 天然气 2144
05/09/2018 00:05:00 美东时间 4114
05/09/2018 00:05:00 美东时间 其他化石燃料 4
05/09/2018 00:05:00 美东时间 其他可再生能源 226
05/09/2018 00:05:00 美东时间 41
05/09/2018 00:05:00 美东时间 水电 3229
05/09/2018 00:10:00 美东时间 双燃料 1307
05/09/2018 00:10:00 美东时间 天然气 2092年
05/09/2018 00:10:00 美东时间 4115
05/09/2018 00:10:00 美东时间 其他化石燃料 4
05/09/2018 00:10:00 美东时间 其他可再生能源 224
05/09/2018 00:10:00 美东时间 40
05/09/2018 00:10:00 美东时间 水电 3166

该表中唯一奇怪的是双燃料类别。 纽约的大多数天然气厂还可以燃烧其他化石燃料来发电。 在冬季寒冷期间,天然气供应受到限制,其用于家庭供暖的优先级高于发电。 这种情况发生的频率足够低,我们可以将双重燃料视为天然气(用于我们的计算)。

该文件全天更新。 我创建了一个简单的数据泵,该泵每分钟轮询一次文件并查找更新。 它将所有新条目发布到MQTT服务器上࿰

Kafka一个分布式流处理平台,主要用于构建实时数据管道和流应用程序。MQTT 是一种轻量级的消息传输协议,通常用于物联网(IoT)设备之间的消息传递。通常情况下,KafkaMQTT 是独立工作的,但是,如果你想让 Kafka 接收来自 MQTT消息,可以通过编写一个桥接程序来实现。 实现 Kafka 连接 MQTT接收消息的基本步骤如下: 1. **准备 MQTT 消息代理**:首先,确保你有一个运行中的 MQTT 代理,如 Mosquitto,它负责接收和分发 MQTT 消息。 2. **编写桥接程序**:你需要编写一个程序(桥接),这个程序订阅 MQTT 代理上的主题,并将接收到的消息转发到 Kafka。这个程序可以用 JavaPython 等语言编写,并且需要使用 MQTT 客户端库(如 paho)和 Kafka 客户端库(如 kafka-python 或 confluent-kafka-python)。 3. **配置 Kafka**:虽然桥接程序负责消息的转发,但你需要确保 Kafka 集群正常运行,并创建相应的主题以供桥接程序将消息发送到。 4. **运行桥接程序**:在桥接程序成功连接到 MQTT 代理和 Kafka 集群后,它会监听指定的 MQTT 主题,并将接收到的消息发布到 Kafka。 以下是一个简单的伪代码示例,用于说明如何将 MQTT 消息转发到 Kafka: ```python # 伪代码,非实际运行代码 from paho.mqtt.client import Client from kafka import KafkaProducer # MQTT 设置 mqtt_client = Client() mqtt_client.connect('mqtt_broker_host', port=mqtt_broker_port) mqtt_client.subscribe('mqtt_topic') # Kafka 设置 kafka_producer = KafkaProducer(bootstrap_servers=['kafka_broker_host']) def on_message(mqtt_client, userdata, message): # 将接收到的 MQTT 消息发送Kafka kafka_producer.send('kafka_topic', message.payload) # 绑定回调函数 mqtt_client.on_message = on_message # 开始循环以处理网络流量,消息发送mqtt_client.loop_forever() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值