Fiware:防止数据丢失

标签 fiware fiware-orion fiware-cygnus

我正在使用 0.27.0 版的上下文代理。我正在使用 Cygnus 通用启用程序,并且我已经建立了一个 MQTT 代理,用于将外部设备连接到上下文代理。

我现在最关心的是如何防止数据丢失。我将上下文代理和 Cygnus mongodb 数据库建立为副本集,但这并不能确保所有数据都将持久保存到数据库中。我已经看到 Cygnus 使用 Apache flume。查看其配置,可以配置重新注入(inject)重试:

# Number of channel re-injection retries before a Flume event is definitely discarded (-1 means infinite retries) 
cygnusagent.sources.http-source.handler.events_ttl = -1

将重试值设置为 -1 是个好主意吗?我已经阅读了有关永远在 channel 中重新注入(inject)的事件。 ¿可以做些什么来确保所有数据都将被持久化? ¿fiware 生态系统中是否有针对该目的的任何功能?

最佳答案

关于Cygnus,TTL肯定是控制错误后持久化重试的方式。重试意味着数据被重新注入(inject)到与源(接收 Orion 通知)和接收器(将数据保存在最终存储中)通信的内部 channel 中,以供将来的持久性尝试使用。

此 TTL 的可能值为:

  • TTL = 0:没有重试,即如果第一次通知的数据无法持久保存在最终存储中(由于网络故障、存储错误等),则数据将被丢弃。
  • TTL > 0:重试次数与配置的 TTL 一样多。一旦 TTL 耗尽,数据就会被丢弃。
  • TTL = -1:无限重试,即数据永远重新注入(inject) channel ,直到它持久化或 channel 变满。

如评论所述,如果最终存储永远无法正常运行,则 -1 TTL 可能会消耗 channel 容量,从而避免将新接收到的数据放入 channel 。尽管如此,如果最终存储永远无法正常工作,那么这样的缺点并不重要,对吧? :)

因此,我们可以说选择 TTL 的规则是:

  • 如果不想重试,只需配置0即可。
  • 如果您想要重试但不介意在一定次数的重试后丢失数据,请配置一个正值。
  • 如果您想要重试但又不想丢失数据,请配置 -1 和较大的 channel 容量,因为最终存储可能会在未知时间内停机。

无论如何,TTL 功能在此冲刺期间正在发生变化。行为将是相同的,但不是应用于单个事件,而是应用于成批事件(当然,成批可能是大约 1 个单个事件)。您将在 Cygnus 的下一个版本 (0.13.0) 中看到此更改,并将在 2016 年 2 月底可用(在撰写本文时,下周 :))。如果您想大量使用 TTL 功能,我的建议是等待此类发布。

关于Fiware:防止数据丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35451531/

相关文章:

fiware - 修改设备 - IoTAgentUL

fiware-orion - 猎户座 : Getting the list of subscriptions

docker - FIWARE Orion订阅创建失败

postgresql - 使用 Postgresql 运行 Cygnus 的问题

hadoop - 让Cygnus使用WebHDFS写入本地HDFS

FIWARE:Orion Context Broker 和 CKAN

javascript - xml3d-tools 给出 XML3D.URIResolver 未定义错误

fiware-orion - 上下文代理 FI : Fatal Error (error starting REST interface)

fiware-orion - 从另一台计算机连接 Orion Context Broker

fiware - 为同一实体插入值序列