Search in sources :

Example 1 with Converter

use of org.apache.kafka.connect.storage.Converter in project kafka by apache.

the class Worker method startTask.

/**
     * Start a task managed by this worker.
     *
     * @param id the task ID.
     * @param connProps the connector properties.
     * @param taskProps the tasks properties.
     * @param statusListener a listener for the runtime status transitions of the task.
     * @param initialState the initial state of the connector.
     * @return true if the task started successfully.
     */
public boolean startTask(ConnectorTaskId id, Map<String, String> connProps, Map<String, String> taskProps, TaskStatus.Listener statusListener, TargetState initialState) {
    log.info("Creating task {}", id);
    if (tasks.containsKey(id))
        throw new ConnectException("Task already exists in this worker: " + id);
    final WorkerTask workerTask;
    try {
        final ConnectorConfig connConfig = new ConnectorConfig(connProps);
        final TaskConfig taskConfig = new TaskConfig(taskProps);
        final Class<? extends Task> taskClass = taskConfig.getClass(TaskConfig.TASK_CLASS_CONFIG).asSubclass(Task.class);
        final Task task = connectorFactory.newTask(taskClass);
        log.info("Instantiated task {} with version {} of type {}", id, task.version(), taskClass.getName());
        Converter keyConverter = connConfig.getConfiguredInstance(WorkerConfig.KEY_CONVERTER_CLASS_CONFIG, Converter.class);
        if (keyConverter != null)
            keyConverter.configure(connConfig.originalsWithPrefix("key.converter."), true);
        else
            keyConverter = defaultKeyConverter;
        Converter valueConverter = connConfig.getConfiguredInstance(WorkerConfig.VALUE_CONVERTER_CLASS_CONFIG, Converter.class);
        if (valueConverter != null)
            valueConverter.configure(connConfig.originalsWithPrefix("value.converter."), false);
        else
            valueConverter = defaultValueConverter;
        workerTask = buildWorkerTask(connConfig, id, task, statusListener, initialState, keyConverter, valueConverter);
        workerTask.initialize(taskConfig);
    } catch (Throwable t) {
        log.error("Failed to start task {}", id, t);
        statusListener.onFailure(id, t);
        return false;
    }
    WorkerTask existing = tasks.putIfAbsent(id, workerTask);
    if (existing != null)
        throw new ConnectException("Task already exists in this worker: " + id);
    executor.submit(workerTask);
    if (workerTask instanceof WorkerSourceTask) {
        sourceTaskOffsetCommitter.schedule(id, (WorkerSourceTask) workerTask);
    }
    return true;
}
Also used : SinkTask(org.apache.kafka.connect.sink.SinkTask) Task(org.apache.kafka.connect.connector.Task) SourceTask(org.apache.kafka.connect.source.SourceTask) Converter(org.apache.kafka.connect.storage.Converter) ConnectException(org.apache.kafka.connect.errors.ConnectException)

Aggregations

Task (org.apache.kafka.connect.connector.Task)1 ConnectException (org.apache.kafka.connect.errors.ConnectException)1 SinkTask (org.apache.kafka.connect.sink.SinkTask)1 SourceTask (org.apache.kafka.connect.source.SourceTask)1 Converter (org.apache.kafka.connect.storage.Converter)1