Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 在发送到任务之前修改KafkaConnect中的连接器配置_Apache Kafka_Apache Kafka Connect - Fatal编程技术网

Apache kafka 在发送到任务之前修改KafkaConnect中的连接器配置

Apache kafka 在发送到任务之前修改KafkaConnect中的连接器配置,apache-kafka,apache-kafka-connect,Apache Kafka,Apache Kafka Connect,我正在用Kafka Connect写一篇文章,并讨论了一个问题。此连接器具有如下配置: { “connector.class”:“a.b.ExampleFileSinkConnector”, “tasks.max”:“1”, “主题”:“我的主题”, “maxFileSize”:“50” } 我这样定义连接器的配置: @Override public ConfigDef config() { ConfigDef结果=新的ConfigDef(); 定义(“maxFileSize”,Type.ST

我正在用Kafka Connect写一篇文章,并讨论了一个问题。此连接器具有如下配置:

{
“connector.class”:“a.b.ExampleFileSinkConnector”,
“tasks.max”:“1”,
“主题”:“我的主题”,
“maxFileSize”:“50”
}
我这样定义连接器的配置:

@Override public ConfigDef config()
{
ConfigDef结果=新的ConfigDef();
定义(“maxFileSize”,Type.STRING,“10”,Importance.HIGH,“文件大小”);
返回结果;
}
在连接器中,我启动以下任务:

@覆盖公共列表任务配置(int-maxTasks){
列表结果=新建ArrayList();
对于(int i=0;i
一切都很顺利

但是,在启动任务时(在taskConfigs()中),如果我添加以下内容:

taskConfig.put(“历元”、“123”);
这破坏了整个基础设施:所有连接器都在一个无休止的循环中停止和重新启动

连接日志文件中没有任何异常或错误可以提供帮助

使其工作的唯一方法是在连接器配置中添加“epoch”,我不想这样做,因为它是连接器必须发送到任务的内部参数。它不打算暴露给连接器的用户

我注意到的另一点是,除了将其设置为默认值之外,不可能更新任何连接器配置参数的值。更改参数并将其发送到任务会产生相同的行为

我真的很感激在这个问题上有任何帮助

编辑:这是SinkTask::start()的代码

@覆盖公共无效启动(映射任务配置){
试一试{
connectorName=taskConfig.get(“connectorName”);
log.info(“{}--Task.start()”,connectorName);
fileNamePattern=taskConfig.get(“fileNamePattern”);
rootDir=taskConfig.get(“rootDir”);
fileExtension=taskConfig.get(“fileExtension”);
maxFileSize=SimpleFileSinkConnector.parseIntegerConfig(taskConfig.get(“maxFileSize”);
maxTimeMinutes=SimpleFileSinkConnector.parseIntegerConfig(taskConfig.get(“maxTimeMinutes”);
maxNumRecords=SimpleFileSinkConnector.parseIntegerConfig(taskConfig.get(“maxNumRecords”);
taskNumber=SimpleFileSinkConnector.parseIntegerConfig(taskConfig.get(“taskNumber”));
epochStart=SimpleFileSinkConnector.parseLongConfig(taskConfig.get(“epochStart”);
log.info(“{}--fileNamePattern:{},rootDir:{},fileExtension:{},maxFileSize:{},maxTimeMinutes:{},maxNumRecords:{},taskNumber:{},epochStart:{}”,
connectorName、fileNamePattern、rootDir、fileExtension、maxFileSize、maxTimeMinutes、maxNumRecords、taskNumber、epochStart);
如果(任务编号==0){
checkTempFilesForPromotion();
}
computeInitialFilename();
log.info(“{}--Task.start()END”,connectorName);
}捕获(例外e){
log.info(“{}--Task.start()异常:{}”,connectorName,e.getLocalizedMessage());
}
}

我们找到了问题的根本原因。Kafka Connect框架实际上按照设计的方式运行-问题与我们如何使用taskConfigs配置框架有关

问题

在我们的设计中,FileSinkConnector在其start()生命周期方法中设置一个历元,该历元通过taskConfigs()生命周期方法传递给其任务。因此,每次连接器的start()生命周期方法运行时,都会为任务生成不同的配置,这就是问题所在

每次生成不同的配置是不可能的。事实证明,Connect框架检测到配置的差异,并将在检测到时重新启动/重新平衡-停止并重新启动连接器/任务。重新启动将调用连接器的stop()和start()方法。。。这将(当然)产生另一个配置变化(因为新时代),恶性循环开始了

这是一个有趣而意想不到的问题。。。由于一种我们不欣赏的连接行为。这是我们第一次尝试生成不是连接器配置的简单功能的任务配置

请注意,Connect中的这种行为是有意的,它解决了动态更改配置的实际问题,比如JDBC接收器连接器,当它检测到要接收的新数据库表时,会自动更新其配置


感谢那些帮助我们的人

你能添加你的
SinkTask::start(…)
源代码吗?你写过,“没有异常或错误”,但“这破坏了整个基础结构”。是否可以添加带有“无止境循环”的部分日志?