使用Kafka Connect在MySQL数据库之间同步数据

时间:2017-09-19 04:19:06

标签: apache-kafka-connect confluent

我正在尝试使用基于Kafka Connect的Confluent在多个MySQL数据库之间同步数据。我在源连接器配置中使用“bulk”模式,因为主键类型是varchar,所以我无法使用递增模式。它工作正常,但我有两个问题:

  1. 似乎无法同步删除,当在源数据库中删除数据时,接收器数据库没有任何反应。数据仍存在于数据库数据库中。
  2. 同步数据需要相当长的时间。在我的情况下,将表与3~4k行同步大约需要2~4分钟。我可以理解,使用批量模式可能会花费更多时间来同步数据,但这不是太长了吗?
  3. 这是我的源连接器配置:

    name=test-source
    connector.class=io.confluent.connect.jdbc.JdbcSourceConnector
    tasks.max=1
    connection.url=jdbc:mysql://xxx.xxx.xxx:3306/xxx?useUnicode=true&characterEncoding=utf8
    connection.user=user
    connection.password=password
    mode=bulk
    table.whitelist=a_table
    

    这是我的接收器配置:

    name=test-sink
    connector.class=io.confluent.connect.jdbc.JdbcSinkConnector
    tasks.max=1 topics=a_table
    connection.url=jdbc:mysql://xxx.xxx.xxx.xxx:3306/xxx?useUnicode=true&characterEncoding=utf8
    connection.user=user
    connection.password=password
    insert.mode=upsert
    pk.mode=record_value
    pk.fields=mypk
    auto.evolve=true
    

    任何建议都会受到赞赏。谢谢。

1 个答案:

答案 0 :(得分:1)

  1. 如果要同步删除,则需要使用CDC,例如Debezium。 JDBC连接器只能检测那里的记录,而不能检测那些记录。

  2. CDC也比批量提取更有效,因为它监视MySQL事务日志中所需表的任何事务。

  3. 您的主键是VARCHAR?哇。如果您不想使用CDC,我建议使用基于INT的密钥,然后使用JDBC连接器进行增量加载。那,或者在表中添加一个时间戳列,并将其用于增量。