THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
Code Block | ||||
---|---|---|---|---|
| ||||
package org.apache.kafka.connect.source; public abstract class SourceConnector extends Connector { // Existing fields and methods omitted /** * Signals whether the connector supports exactly-once delivery guarantees with a proposed configuration. * Developers can assume that worker-level exactly-once support is enabled when this method is invoked. * The default implementation will return {@code null}. * @param connectorConfigs the configuration that will be used for the connector. * @return {@link ExactlyOnceSupport#SUPPORTED} if the connector can provide exactly-once support, * and {@link ExactlyOnceSupport#UNSUPPORTED} if it cannot. If {@code null}, it is assumed that the * connector cannot. */ public ExactlyOnceSupport exactlyOnceSupport(Map<String, String> connectorConfig) { return falsenull; } } |
A new TransactionContext
interface is introduced:
...
Code Block | ||||
---|---|---|---|---|
| ||||
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 sinksource 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 } } |
...