Ejemplo de demostración de inicio rápido de Flink CDC2.0 (acoplamiento Jar, no SQL)

¡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!

❤ Si te ayuda, haz clic en tres seguidos~~

Supongo que te gusta

Origin blog.csdn.net/qq_20051535/article/details/121071915
Recomendado
Clasificación