Kafka Connect:JDBC源连接器:使用多个分区创建主题

Kafka Connect:JDBC源连接器:使用多个分区创建主题,jdbc,apache-kafka,hdfs,apache-kafka-connect,confluent-platform,Jdbc,Apache Kafka,Hdfs,Apache Kafka Connect,Confluent Platform,我已经从MySQL创建了一个轮询数据的示例管道,并将其写入HDFS(以及配置单元表) 由于我的需求,我需要为每个db表创建源+连接器对。 下面,我发布了源和接收器连接器的配置设置 我可以看到一个主题是用一个分区和1的复制因子创建的 主题创建应该是自动的,这意味着我不能在创建源+接收器对之前手动创建主题 我的问题是: 1) 在创建源连接器时,是否有方法配置分区数和复制因子 2) 如果可以创建多个分区,那么源连接器使用哪种分区策略 3) 应为源和汇连接器创建多少个正确的工作线程 源连接器: {

我已经从MySQL创建了一个轮询数据的示例管道,并将其写入HDFS(以及配置单元表)

由于我的需求,我需要为每个db表创建源+连接器对。 下面,我发布了源和接收器连接器的配置设置

我可以看到一个主题是用一个分区和1的复制因子创建的

主题创建应该是自动的,这意味着我不能在创建源+接收器对之前手动创建主题

我的问题是:

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"
}
接收器连接器:

{
  "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) 在创建源连接器时,是否有方法配置分区数和复制因子

不是从Connect,不是

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

源连接器使用什么样的分区策略

取决于哪个连接器以及代码的编写方式(即是否/如何生成记录的键)。例如,对于JDBC连接器,键可能是数据库表的主键。它将使用DefaultPartitioner进行散列。我不相信Connect允许您在每个连接器级别指定自定义分区器。如果键为null,则消息将分布在所有分区上

3) 应为源和汇连接器创建多少个正确的工作线程

同样,这取决于来源。对于JDBC,每个表将有一个任务

不过,对于接收器,任务最多只能是正在下沉的主题的分区数(与所有使用者组一样)



另外,您通常会从数据库(和Hadoop集群)中分别运行Connect cluster)

我认为在启动Connector之前,您必须创建包含所需复制和分区的主题。