¡importante!
El nombre Flink CDC lleva Flink, ¡pero presta atención! ! ! Cuando creamos una demostración simple localmente, podemos ejecutarla localmente sin descargar el entorno flink .
FlinkCDC es un paquete jar . Después de presentarlo, escriba un método principal para mostrar sus funciones simples. (Como novato, consideraba a FlinkCDC como un complemento similar a la segmentación de palabras ik, así que descargué Flink primero...)
Preparación
- Necesitas saber cómo usar maven.
- ≤La versión FlinkCDC 1.4.0 puede usar MySQL5.6+, FlinkCDC debe ser 5.7+
Aunque Flink CDC requiere oficialmente MySQL 5.7+, la versión 1.4 de Flink CDC actualmente no tiene problemas para ejecutarse en MySQL 5.6. Simplemente crear una demostración es suficiente. Si crea un entorno de producción con 5.6, ¡pruébelo cuidadosamente!
Habilitar binlog
Debe modificar el archivo de configuración de MySQL my.cnf, agregue o agregue el siguiente contenido en él:
[mysqld]
log-bin=mysql-bin
server-id=1
binlog_format=ROW
Los usuarios de MAC deben crear manualmente este archivo en el directorio etc. Los usuarios de Windows pueden consultar otros blogs para habilitar binlog (este paso es muy simple, por lo que hay más contenido)
comprobar binlog
Necesitas reiniciar MySQL
Luego ejecute la siguiente declaración para ver si se habilita correctamente:
show variables like '%log_bin%';
Después de ejecutarlo, debería mostrar que log_bin está activado.
show variables like 'binlog_format';
Después de ejecutarlo, debería mostrar que binlog_format es FILA
Si el resultado de la ejecución es correcto, puede continuar con el siguiente paso. Si es incorrecto, corríjalo primero.
Crear un nuevo proyecto y probar
Abra el IDE y cree un nuevo proyecto Maven en blanco.
Aquí, tanto mi Flink CDC versión 1.4.0 como Flink CDC 2.0 se pueden usar normalmente, puede elegir usted mismo (para amigos con versiones anteriores, comente las coordenadas 2.0.x y reemplácelas con las de los comentarios a continuación)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>flinkcdc-test</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>*.dsp.redispositive.Application</mainClass>
<useUniqueVersions>false</useUniqueVersions>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<flink-version>1.13.0</flink-version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>${flink-version}</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.12</artifactId>
<version>${flink-version}</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-clients_2.12</artifactId>
<version>${flink-version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-table-planner-blink_2.12</artifactId>
<version>${flink-version}</version>
</dependency>
<dependency>
<groupId>com.ververica</groupId>
<artifactId>flink-connector-mysql-cdc</artifactId>
<version>2.0.2</version>
</dependency>
<!--老版本的用户打开这个注释,把上面2.0注释掉
<dependency>
<groupId>com.alibaba.ververica</groupId>
<artifactId>flink-connector-mysql-cdc</artifactId>
<version>1.4.0</version>
</dependency>-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
</dependencies>
</project>
Creamos un nuevo método principal para realizar pruebas:
Nota: El nombre del paquete Flink CDC2.0 se ha cambiado y "alibaba" no está incluido en la importación. Puede pegar el código para permitir que importe automáticamente el paquete.
import com.alibaba.ververica.cdc.connectors.mysql.table.StartupOptions;
import com.alibaba.ververica.cdc.debezium.StringDebeziumDeserializationSchema;
import org.apache.commons.collections.CollectionUtils;
import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.source.SourceFunction;
import com.alibaba.ververica.cdc.connectors.mysql.MySQLSource;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MySqlSourceExample {
public static void main(String[] args) throws Exception {
SourceFunction<String> sourceFunction = MySQLSource.<String>builder()
.hostname("localhost")
.port(3306)
.databaseList("cdc_test") //订阅的库
.username("root")
.password("root")
.deserializer(new StringDebeziumDeserializationSchema())
.build();
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.addSource(sourceFunction)
.print()
.setParallelism(1);
env.execute();
}
}
realizar pruebas
Ejecutamos el método principal, el inicio es lento, ¡espere pacientemente!
Si aparecen las siguientes cosas, no afectarán la ejecución de la demostración y pueden ignorarse:
Simplemente modifique la biblioteca de monitoreo de la base de datos y vea la siguiente información de registro binlog, ¡lo que significa éxito!