Tranquility escribe datos en Druid

demanda

  • Inicie una versión independiente de Druid
  • Escriba algunos datos directamente a través de un cliente, no a través de otro kafka o importación por lotes

Plan investigado

Configuración independiente de druida

Tranquilidad

  • Ctrl + C matar a Druid

  • Descarga Tranquility y hazlo en el directorio raíz de Druid

curl http://static.druid.io/tranquility/releases/tranquility-distribution-0.8.2.tgz -o tranquility-distribution-0.8.2.tgz
tar -xzf tranquility-distribution-0.8.2.tgz
mv tranquility-distribution-0.8.2 tranquility
  • Modifique el archivo quickstart / tutorial / conf / tutorial-cluster.conf y elimine el # antes de la línea tranquility-server
# Uncomment to use Tranquility Server
!p95 tranquility-server tranquility/bin/tranquility server -configFile quickstart/tutorial/conf/tranquility/wikipedia-server.json -Ddruid.extensions.loadList=[]
  • Inicio Druida + Tranquilidad
bin/supervise -c quickstart/tutorial/conf/tutorial-cluster.conf

Ejemplo de proyecto maven

  • Código del proyecto: https://github.com/qiaojialin/TranquilityExample

  • Crea una nueva carpeta de recursos

  • Crea un nuevo archivo en él example.json:

    {
      "dataSources": [
        {
          "spec": {
            "dataSchema": {
              "dataSource": "wikipedia",
              "parser": {
                "type": "string",
                "parseSpec": {
                  "format": "json",
                  "timestampSpec": {
                    "column": "timestamp",
                    "format": "auto"
                  },
                  "dimensionsSpec": {
                    "dimensions": [
                      "page",
                      "language",
                      "user",
                      "unpatrolled",
                      "newPage",
                      "robot",
                      "anonymous",
                      "namespace",
                      "continent",
                      "country",
                      "region",
                      "city"
                    ],
                    "dimensionExclusions": [],
                    "spatialDimensions": []
                  }
                }
              },
              "metricsSpec": [
                {
                  "type": "count",
                  "name": "count"
                },
                {
                  "type": "doubleSum",
                  "name": "added",
                  "fieldName": "added"
                },
                {
                  "type": "doubleSum",
                  "name": "deleted",
                  "fieldName": "deleted"
                },
                {
                  "type": "doubleSum",
                  "name": "delta",
                  "fieldName": "delta"
                }
              ],
              "granularitySpec": {
                "type": "uniform",
                "segmentGranularity": "DAY",
                "queryGranularity": "NONE"
              }
            },
            "tuningConfig": {
              "type": "realtime",
              "maxRowsInMemory": 100000,
              "intermediatePersistPeriod": "PT10m",
              "windowPeriod": "PT10M"
            }
          }
        }
      ],
      "properties": {
        "zookeeper.connect": "localhost:2181",
        "druid.selectors.indexing.serviceName": "druid/overlord",
        "druid.discovery.curator.path": "/druid/discovery",
        "druidBeam.taskLocator": "overlord",
        "druidBeam.overlordPollPeriod": "PT5S"
      }
    }
    
    
  • Código de muestra

    	
    import com.google.common.collect.ImmutableMap;
    import com.metamx.common.logger.Logger;
    import com.metamx.tranquility.config.DataSourceConfig;
    import com.metamx.tranquility.config.PropertiesBasedConfig;
    import com.metamx.tranquility.config.TranquilityConfig;
    import com.metamx.tranquility.druid.DruidBeams;
    import com.metamx.tranquility.tranquilizer.MessageDroppedException;
    import com.metamx.tranquility.tranquilizer.Tranquilizer;
    import com.twitter.util.FutureEventListener;
    import org.joda.time.DateTime;
    import scala.runtime.BoxedUnit;
    
    import java.io.InputStream;
    import java.util.Map;
    
    public class JavaExample
    {
      private static final Logger log = new Logger(JavaExample.class);
    
      public static void main(String[] args)
      {
        // Read config from "example.json" on the classpath.
        final InputStream configStream = JavaExample.class.getClassLoader().getResourceAsStream("example.json");
        final TranquilityConfig<PropertiesBasedConfig> config = TranquilityConfig.read(configStream);
        final DataSourceConfig<PropertiesBasedConfig> wikipediaConfig = config.getDataSource("wikipedia");
        final Tranquilizer<Map<String, Object>> sender = DruidBeams.fromConfig(wikipediaConfig)
            .buildTranquilizer(wikipediaConfig.tranquilizerBuilder());
    
        sender.start();
    
        try {
          // Send 10000 objects
    
          for (int i = 0; i < 10000; i++) {
            // Build a sample event to send; make sure we use a current date
            final Map<String, Object> obj = ImmutableMap.<String, Object>of(
                "timestamp", new DateTime().toString(),
                "page", "foo",
                "added", i
            );
    
            // Asynchronously send event to Druid:
            sender.send(obj).addEventListener(
                new FutureEventListener<BoxedUnit>()
                {
                  @Override
                  public void onSuccess(BoxedUnit value)
                  {
                    log.info("Sent message: %s", obj);
                  }
    
                  @Override
                  public void onFailure(Throwable e)
                  {
                    if (e instanceof MessageDroppedException) {
                      log.warn(e, "Dropped message: %s", obj);
                    } else {
                      log.error(e, "Failed to send message: %s", obj);
                    }
                  }
                }
            );
          }
        }
        finally {
          sender.flush();
          sender.stop();
        }
      }
    }
    
    
  • Agregar dependencia (este paso es el peor)

    • Asegúrese de que la scala de jackson y la tranquilidad sean 2.11
    • jackson-2.9.2 está bien, 2.9.8 no, no se han probado otras versiones
    <dependency>
      <groupId>com.fasterxml.jackson.module</groupId>
      <artifactId>jackson-module-scala_2.11</artifactId>
      <version>2.9.2</version>
    </dependency>
    <dependency>
      <groupId>com.metamx</groupId>
      <artifactId>java-util</artifactId>
      <version>0.27.9</version>
    </dependency>
    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
      <version>2.9.4</version>
    </dependency>
    <dependency>
      <groupId>io.druid</groupId>
      <artifactId>tranquility-core_2.11</artifactId>
      <version>0.8.2</version>
    </dependency>
    
  • Lo anterior se probó en un proyecto limpio. En otro proyecto mío, no sé qué conflicto con él. No puedo encontrar una manera de nuevo, así que agregué tres dependencias más.

    <dependency>
      <groupId>com.fasterxml.jackson.module</groupId>
      <artifactId>jackson-module-scala_2.11</artifactId>
      <version>2.9.2</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.module</groupId>
      <artifactId>jackson-module-jaxb-annotations</artifactId>
      <version>2.9.2</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.2</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.2</version>
    </dependency>
    

Otros pozos

La dependencia no es lo peor. Pude escribir datos ayer, pero no puedo escribirlos hoy. Se dice que varias MessageDroppedExceptions son un problema de ventana de tiempo en Internet, y es inútil ajustar la fecha.

El mayor escollo es que Tranquility solo admite la escritura de datos durante un período de tiempo, lo cual es muy incómodo, así que me di por vencido y me preparé para cambiar al servicio Kafka Indexing.

Supongo que te gusta

Origin blog.csdn.net/qiaojialin/article/details/88663054
Recomendado
Clasificación