我正在尝试使用orionmysqlsink的列类型。我的代理人有以下代码:
cygnusagent.sinks.mysql-sink.type = com.telefonica.iot.cygnus.sinks.OrionMySQLSink
cygnusagent.sinks.mysql-sink.channel = mysql-channel
cygnusagent.sinks.mysql-sink.enable_grouping = false
cygnusagent.sinks.mysql-sink.mysql_host = localhost
cygnusagent.sinks.mysql-sink.mysql_port = 3306
cygnusagent.sinks.mysql-sink.mysql_username =********
cygnusagent.sinks.mysql-sink.mysql_password =*********
cygnusagent.sinks.mysql-sink.table_type = table-by-destination
cygnusagent.sinks.mysql-sink.attr_persistence = column
cygnusagent.sinks.mysql-sink.batch_size = 1
cygnusagent.sinks.mysql-sink.batch_timeout = 10
我在使用Flume时出现了以下错误:
2015-12-14 08:43:58,118 (SinkRunner-PollingRunner-DefaultSinkProcessor) [ERROR - com.telefonica.iot.cygnus.sinks.OrionSink.process(OrionSink.java:187)] Persistence error (Unknown database 'fiw-serv')
我对行模式没有任何问题,只有列模式。
1条答案
按热度按时间twh00eeo1#
这是因为
OrionMySQLSink
需要提前创建表。详细的解释可以在这里找到。基本上:请注意不要总是通知相同数量的属性;这取决于对ngsi-like发送方的订阅。这对于行持久性模式不是问题,因为为每个通知的属性插入了固定的8字段数据行。然而,列模式可能会受到不同长度的多个数据行(按字段)的影响。因此,只有当您的订阅设计为始终发送相同的属性时,才建议使用列模式,如果自上次通知以来没有更新这些属性,则建议使用事件模式。
此外,在列模式下运行时,由于cygnus不知道通知的属性数(因此数据存储中要写入的字段数),因此无法自动创建表,必须在cygnus执行之前设置表。这不是行模式的情况,因为要写入的字段数始终是恒定的,与通知的属性数无关。
类似的事情发生在
OrionCKANSink
,其中必须提前创建资源、数据存储和视图。