从卡夫卡消费并发送给德鲁伊问题

时间:2016-12-06 12:37:20

标签: druid

我有一个Java应用程序应该从Kafka读取,做一些魔术并将数据发送给德鲁伊。

我有Kafka工作线程(每个主题大约15个)消耗来自Kafka的数据并最终使用Tranquility将其发送给Druid。

这是问题所在: 如果我使用一个线程 - 一切都很好。如果我与多个人合作,我会得到例外。

我尝试了以下方式:

  1. 春天德鲁伊服务与几个宁静对象。
  2. 没有Spring,只需为每个线程创建几个Tranquility对象。
  3. 我认为这可能是并发问题。

    当我说“几个Tranquility”时,我的意思是我将数据发送到不同的表格。

    我明白了:

    java.lang.AssertionError: assertion failed: List(package nio, package nio, package nio, package nio, package nio, package nio, package nio)
    at scala.reflect.internal.Symbols$Symbol.suchThat(Symbols.scala:1678) ~[scala-reflect-2.10.5.jar!/:na]
    at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:44) ~[scala-reflect-2.10.5.jar!/:na]
    at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:40) ~[scala-reflect-2.10.5.jar!/:na]
    at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:61) ~[scala-reflect-2.10.5.jar!/:na]
    at scala.reflect.internal.Mirrors$RootsBase.staticModuleOrClass(Mirrors.scala:72) ~[scala-reflect-2.10.5.jar!/:na]
    at scala.reflect.internal.Mirrors$RootsBase.staticClass(Mirrors.scala:119) ~[scala-reflect-2.10.5.jar!/:na]
    at scala.reflect.internal.Mirrors$RootsBase.staticClass(Mirrors.scala:21) ~[scala-reflect-2.10.5.jar!/:na]
    at com.metamx.tranquility.druid.DruidBeams$$anonfun$1$$typecreator3$1.apply(DruidBeams.scala:166) ~[tranquility-core_2.10-0.8.2.jar!/:0.8.2]
    at scala.reflect.api.TypeTags$WeakTypeTagImpl.tpe$lzycompute(TypeTags.scala:231) ~[scala-reflect-2.10.5.jar!/:na]
    at scala.reflect.api.TypeTags$WeakTypeTagImpl.tpe(TypeTags.scala:231) ~[scala-reflect-2.10.5.jar!/:na]
    at scala.reflect.api.TypeTags$TypeTag$class.equals(TypeTags.scala:256) ~[scala-reflect-2.10.5.jar!/:na]
    at scala.reflect.api.TypeTags$TypeTagImpl.equals(TypeTags.scala:291) ~[scala-reflect-2.10.5.jar!/:na]
    at com.metamx.tranquility.druid.DruidBeams$$anonfun$1.apply(DruidBeams.scala:166) ~[tranquility-core_2.10-0.8.2.jar!/:0.8.2]
    at com.metamx.tranquility.druid.DruidBeams$$anonfun$1.apply(DruidBeams.scala:152) ~[tranquility-core_2.10-0.8.2.jar!/:0.8.2]
    at com.metamx.tranquility.druid.DruidBeams$.fromConfigInternal(DruidBeams.scala:341) ~[tranquility-core_2.10-0.8.2.jar!/:0.8.2]
    at com.metamx.tranquility.druid.DruidBeams$.fromConfig(DruidBeams.scala:204) ~[tranquility-core_2.10-0.8.2.jar!/:0.8.2]
    at com.metamx.tranquility.druid.DruidBeams$.fromConfig(DruidBeams.scala:123) ~[tranquility-core_2.10-0.8.2.jar!/:0.8.2]
    at com.metamx.tranquility.druid.DruidBeams.fromConfig(DruidBeams.scala) ~[tranquility-core_2.10-0.8.2.jar!/:0.8.2]
    at com.cooladata.etl.rt.connector.DruidConnector.registerSender(DruidConnector.java:57) 
    at com.cooladata.etl.rt.util.DruidUtil.emmitEvent(DruidUtil.java:26) 
    

1 个答案:

答案 0 :(得分:0)

我建议采取其他工资。首先,您应该知道宁静会导致比某段时间更早的事件,因为我记得默认情况下是一小时。如果您只关心最近的事件,那就没关系。 由于你已经拥有Kafka,我建议你将已处理的数据推送回Kafka并使用Tranquility或Kafka indexer service将数据发送给Druid。这种方法的好处是,不仅德鲁伊而且其他服务可以使用这些数据。此外,与Tranquility相比,Kafka索引器服务不会丢弃任何事件。