...
Code Block |
---|
language | java |
---|
title | SourceTaskContext |
---|
|
package org.apache.kafka.connect.source;
public interface SourceTaskContext {
// Existing fields and methods omitted
/**
* Get a {@link TransactionContext} that can be used to define producer transaction boundaries
* when exactly-once support is enabled for the connector.
*
* <p>This method was added in Apache Kafka 3.0. Source tasks that use this method but want to
* maintain backward compatibility so they can also be deployed to older Connect runtimes
* should guard the call to this method with a try-catch block, since calling this method will result in a
* {@link NoSuchMethodException} or {@link NoClassDefFoundError} when the source connector is deployed to
* Connect runtimes older than Kafka 3.0. For example:
* <pre>
* TransactionContext transactionContext;
* try {
* transactionContext = context.transactionContext();
* } catch (NoSuchMethodError | NoClassDefFoundError e) {
* transactionContext = null;
* }
* </pre>
*
* @return the transaction context, or null if the user does not want the connector to define
* its own transaction boundaries
* @since 3.0
*/
default TransactionContext transactionContext() {
return null
}
} |
A new ConnectorTransactionBoundaries
enum is introduced:
Code Block |
---|
language | java |
---|
title | SourceConnector |
---|
|
package org.apache.kafka.connect.source;
/**
* An enum to represent the level of support for connector-defined transaction boundaries.
*/
public enum ConnectorTransactionBoundaries {
/**
* Signals that a connector can define its own transaction boundaries.
*/
SUPPORTED,
/**
* Signals that a connector cannot define its own transaction boundaries.
*/
UNSUPPORTED
} |
And the SourceConnector
API is expanded with a second new method to allow developers to specify whether their connector can define its own transaction boundaries:
Code Block |
---|
language | java |
---|
title | SourceConnector |
---|
|
package org.apache.kafka.connect.source;
public abstract class SourceConnector extends Connector {
// Existing fields and methods omitted
/**
* Signals whether the connector can define its own transaction boundaries with the proposed
* configuration. Developers must override this method if they wish to add connector-defined
* transaction boundary support; if they do not, users will be unable to create instances of
* this connector that use connector-defined transaction boundaries. The default implementation
* will return {@code falseUNSUPPORTED}.
* @param connectorConfigs the configuration that will be used for the connector
* @return whether the connector can define its own transaction boundaries with the given
* config.
*/
public booleanConnectorTransactionBoundaries canDefineTransactionBoundaries(Map<String, String> connectorConfig) {
return falseConnectorTransactionBoundaries.UNSUPPORTED;
}
} |
REST API pre-flight validation
...