Kafka Connect:JDBC源连接器:创建具有多个分区的主题

时间:2019-02-13 07:50:36

标签: jdbc apache-kafka hdfs apache-kafka-connect confluent

我已经创建了一个示例管道,用于从MySQL轮询数据并写入HDFS(也包括蜂巢表)。

由于我的要求,我需要为每个数据库表创建Source + Connector对。 接下来,我发布了源连接器和接收器连接器的配置设置。

我可以看到一个主题创建有一个分区,复制因子为1。

主题创建应该是自动的,这意味着在创建Source + Sink对之前,我无法手动创建主题。

我的问题:

1)创建源连接器时是否可以配置分区数和复制因子?

2)如果可以创建多个分区,则源连接器将使用哪种分区策略?

3)应该为源连接器和接收器连接器创建多少个正确的工人?

源连接器:

{
  "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
  "mode": "timestamp+incrementing",
  "timestamp.column.name": "modified",
  "incrementing.column.name": "id",
  "topic.prefix": "jdbc_var_cols-",
  "tasks.max": "1",
  "poll.interval.ms": "1000",
  "query": "SELECT id,name,email,department,modified FROM test",
  "connection.url": "jdbc:mariadb://127.0.0.1:3306/connect_test?user=root&password=confluent"
}

接收器连接器:

{
  "connector.class": "io.confluent.connect.hdfs.HdfsSinkConnector",
  "topics.dir": "/user/datalake/topics-hive-var_cols3",
  "hadoop.conf.dir": "/tmp/quickstart/hadoop/conf",
  "flush.size": "5",
  "schema.compatibility": "BACKWARD",
  "connect.hdfs.principal": "datalake@MYREALM.LOCAL",
  "connect.hdfs.keytab": "/tmp/quickstart/datalake.keytab",
  "tasks.max": "3",
  "topics": "jdbc_var_cols-",
  "hdfs.url": "hdfs://mycluster:8020",
  "hive.database": "kafka_connect_db_var_cols3",
  "hdfs.authentication.kerberos": "true",
  "rotate.interval.ms": "1000",
  "hive.metastore.uris": "thrift://hive_server:9083",
  "hadoop.home": "/tmp/quickstart/hadoop",
  "logs.dir": "/logs",
  "format.class": "io.confluent.connect.hdfs.avro.AvroFormat",
  "hive.integration": "true",
  "hdfs.namenode.principal": "nn/_HOST@MYREALM.LOCAL",
  "hive.conf.dir": "/tmp/quickstart/hadoop/conf"
}

1 个答案:

答案 0 :(得分:1)

  

1)创建源连接器时是否可以配置分区数和复制因子?

不是来自Connect,不是。

听起来像在代理上启用了自动主题创建,所以它正在使用默认值。理想情况下,应在生产环境中禁用此功能,因此您必须提前创建主题。

  

源连接器使用哪种分区策略?

取决于哪个连接器以及如何编写代码(即是否/如何生成记录的密钥)。例如,假设使用JDBC连接器,则该键可能是数据库表的主键。它将使用DefaultPartitioner进行哈希处理。我不认为Connect允许您在每个连接器级别指定自定义分区程序。如果键为空,则消息将分布在所有分区上。

  

3)应该为源连接器和接收器连接器创建多少个正确的工人?

再次,取决于来源。对于JDBC,每个表只有一个任务。

但是对于接收器,任务只能达到所接收主题的分区数(与所有消费者组一样)。


此外,通常将Connect群集与数据库(和Hadoop群集)分开运行

相关问题