Flink 1.10 SQL leer Kafka

Recientemente, debido a la epidemia, se robó una buena perezoso durante mucho tiempo, ahora por fin empezando a ver continuada Flink del SQL 

----------------

Flink elementos en el equipo ya ha actualizado a 1.10, y también recientemente Dime qué red el nuevo documento, aprovechando el fin de semana para experimentar la nueva versión de la API de SQL (paso en boxes).

Dirigir desde el anterior ejemplo de SQL Flink nube mal Gángster de partida (POM tiene una buena terminando por delante).

Recuérdese de la simple, Kafka se recibe desde el comportamiento de los usuarios, de acuerdo con el tiempo de los paquetes, en busca de PV y UV, y luego salida a la mysql.

Mira la dependencia añadiendo:

    <dependency> 
    <groupId> org.apache.flink </ groupId> 
    <artifactId> flink mesa </ artifactId> 
    <versión> $ {} flink.version </ version> 
    <type> POM </ type> 
</ dependency> 
<dependency> 
    <groupId> org.apache.flink </ groupId> 
    <artifactId> flink-table-api-java-bridge_2.11 </ artifactId> 
    <versión> $ {} flink.version </ version> 
</ dependency> 
<! - o ... -> 
<dependency> 
    <groupId> org.apache.flink </ groupId> 
    <artifactId> flink-table-api-scala-bridge_2.11 </ artifactId> 
    <versión> $ {flink .version} </ version>
</ dependency> 
<dependency> 
    <groupId> org.apache.flink </ groupId>
    <artifactId> flink-tabla-común </ artifactId> 
    <versión> $ {} flink.version </ version> 
</ dependency> 
<dependency> 
    <groupId> org.apache.flink </ groupId> 
    <artifactId> flink mesa -API-java </ artifactId> 
    <versión> $ {} flink.version </ version> 
</ dependency> 
<dependency> 
    <groupId> org.apache.flink </ groupId> 
    <artifactId> flink-table-api-scala_ $ {} scala.binary.version </ artifactId> 
    <versión> $ {} flink.version </ version> 
</ dependency> 
<dependency> 
    <groupId> org.apache.flink </ groupId> 
    <artifactId>Flink-table-planificador-blink_2.11 </ artifactId> 
    <versión> $ {} flink.version </ version> 
</ dependency>version} </ version> 
<dependency> 
    <groupId> org.apache.flink </ groupId>
    <artifactId> flink-table-planner_2.11 </ artifactId> 
    <versión> $ {} flink.version </ version> 
</ dependency> 
<dependency> 
    <groupId> org.apache.flink </ groupId> 
    <artifactId> flink -jdbc_2.11 </ artifactId> 
    <versión> $ {} flink.version </ version> 
</ dependency> 
<dependency> 
    <groupId> org.apache.flink </ groupId> 
    <artifactId> flink-csv </ artifactId> 
    <versión> $ {} flink.version </ version> 
</ dependency>

tabla asociada a estos, varios de los nuevos atención dependencia, tales como: flink-jdbc_2.11-1.10.0.jar

Mira archivo sql correspondiente:

- tablaFuente 
CREATE user_log TABLA ( 
    user_id VARCHAR, 
    item_id VARCHAR, 
    category_id VARCHAR, 
    comportamiento VARCHAR, ts marca de tiempo (3)
    
) con (
     'connector.type' = 'kafka' ,
     'connector.version' = 'universal' ,
     'conector. tema '= 'user_behavior' ,
     'connector.startup-mode'= 'más temprano-offset' ,
     'connector.properties.0.key'= 'zookeeper.connect' ,
     'connector.properties.0.value'=' Venn: 2181' ,
     'connector.properties.1.key' = 'bootstrap.servers' ,
    'Connector.properties.1.value' = 'amigo: 9092' ,
    'update-mode' = 'append' ,
     'format.type' = 'json' ,
     'format.derive esquema' = 'true' 
); 

- sinkTable 
CREATE pvuv_sink TABLA ( 
    dt VARCHAR, 
    pv BIGINT, 
    uv BIGINT 
) con (
     'connector.type' = 'jdbc' ,
     'connector.url' = 'jdbc: mysql: // Venn: 3306 / Venn' ,
     'conector .table'= 'pvuv_sink' ,
     'connector.username'= 'root' ,
     'connector.password'= '123456' ,
     'connector.write.flush.max-filas'= '1' 
);

 'yyyy-MM-DD HH: 00' ) dt, 
  COUNT ( * ) como PV, 
  COUNT (user_id DISTINCT) como UV 
DE user_log 
GROUP BY DATE_FORMAT (ts, 'yyyy-MM-DD HH: 00') ;

ejecución

El primer problema que se presenta es: "Tipo de marca de tiempo (6) de 'ts' mesa de campo no coincide con el tipo TIMESTAMP física (3) del campo del tipo de retorno TableSource los 'ts'"

El aspecto predeterminado es TIMESTAMP TIMESTAMP (6.), Y la fuente TIMESTAMP ( "TS": "2017-11-26T01: 00: 01Z") no coincide con el tipo de datos directamente a ts: marca de tiempo (3), conseguir.

Si no hay otro hoyo, puede ser ejecutado directamente, la salida de datos a myql en el

 

 

 Después de salir desde el conector SQL, y la mirada en la próxima kafak, medio Flink 1.10 SQL, kafka sólo es compatible con CSV, JSON y Avro tres tipos. (Prueba el siguiente JSON y CSV)

dos programas de SQL, incluyendo lectura y escritura JSON, CSN.

Directamente sobre el disipador de SQL tabla modificada a kafak de escritura:

- sinkTable 
CREATE user_log_sink TABLA ( 
    dt VARCHAR, 
    pv BIGINT, 
    uv BIGINT 
) con (
     'connector.type' = 'kafka' ,
     'connector.version' = 'universal' ,
     'connector.topic' = 'user_behavior_sink' ,
     'conector .properties.zookeeper.connect'= 'Venn: 2181' ,
     'connector.properties.bootstrap.servers'= 'Venn: 9092' ,
     'actualización en modo'= 'append',
     'format.type'= 'json' 
) ;

Sin embargo, no se puede ejecutar.

Se reportó el siguiente error:

AppendStreamTableSink requiere que la tabla sólo puede insertar cambios.

WTF, por encima de la 'actualización en modo' está claramente escrito ' append

Entonces, empecé hace tiempo, y no hay nada Aves de funcionamiento: Dime qué documentación de la red, SQL modificar la configuración. .

Pasamos mucho tiempo aquí --------------- -----------------

Hasta el final, capricho, directamente al contenido de la fuente de salida de la misma, sin ninguna conversión:

- inserción 
INSERT INTO user_log_sink (dt, pv, uv) 
SELECT user_id, item_id, category_id, comportamiento, ts 
DE user_log;

parte fregadero también será modificado:

- sinkTable 
CREATE user_log_sink TABLA ( 
    user_id VARCHAR, 
    item_id VARCHAR, 
    category_id VARCHAR, 
    comportamiento VARCHAR, 
    ts marca de tiempo ( 3 ) 
) con (
     'connector.type' = 'kafka' ,
     'connector.version' = 'universal' ,
     'conector. tema '= 'user_behavior_sink_1' ,
     'connector.properties.zookeeper.connect'= 'Venn: 2181' ,
     'connector.properties.bootstrap.servers'= 'Venn: 9092' ,
     'update-mode'= 'append' ,
     ' format.type'= 'json' 
);

Como, además, a. .

Hey, el sitio web oficial y otra documentación, leen, y usted debe saber por qué (nota: como conocimientos para agregar)

Entonces comenzó el último hoyo.

Al escribir csv, se reunió el último hoyo, las versiones anteriores, "flink-sombra-jackso" He estado usando "2.7.9-3.0," pero no había CsvSchame, por lo que ha sido este error:

Causado por: java.lang.ClassNotFoundException: org.apache.flink.shaded.jackson2.com.fasterxml.jackson.dataformat.csv.CsvSchema $ Constructor

La versión flink-sombra-jackso reemplazado versión del código de flink "2.9.8-7.0" 

Básicamente, es la correcta finalización de la escritura JSON kafka conector y el csv.

Y finalmente pegar el SQL completo:


#     'Format.type' = 'csv' 
); -
    


format.type'= 'csv' ); -
    

 inserto
INSERT INTO user_log_sink (dt, pv, uv) 
SELECT user_id, item_id, category_id, comportamiento, ts 
DE user_log;

los archivos cargados en el github relacionado con SQL:  Flink-rookic   , dependerá en pom.xml también actualizada.

 

Hace tiempo que no escritura, recientemente simplemente intentar de nuevo el SQL kafak / MySQL en / archivo / hbase / / hdfs y otro conector, y luego intentar algo más de SQL

 

Supongo que te gusta

Origin www.cnblogs.com/Springmoon-venn/p/12498883.html
Recomendado
Clasificación