AssignmentAdapterHelper.java
Overview
`AssignmentAdapterHelper.java` is a utility class within the [org.apache.camel.component.kafka.consumer.support.classic](/projects/289/68593) package. Its primary responsibility is to determine and provide an appropriate Kafka partition assignment adapter based on the configuration of a Kafka consumer in Apache Camel. This helper class facilitates support for different resume strategies when a Kafka consumer is assigned partitions, specifically handling offset-based resuming, seek policy-based resuming, or falling back to a no-operation strategy.
In essence, it abstracts the logic that selects which partition assignment adapter should be used for resuming consumption from Kafka partitions, based on the consumer's configuration.
Classes and Methods
Class: AssignmentAdapterHelper
Type:
finalutility classVisibility: package-private (default; no explicit modifier)
Purpose: Provides static utility methods to resolve and return the appropriate
PartitionAssignmentAdapterimplementation based on the Kafka consumer configuration.
Constants
Name | Type | Description |
|---|---|---|
`NO_OP_ASSIGNMENT_ADAPTER` | `NoOpPartitionAssignmentAdapter` | Singleton instance used when no resume strategy is applicable. |
`LOG` | `Logger` | Logger instance for debug/info logging. |
Constructor
private AssignmentAdapterHelper()Private constructor to prevent instantiation of this utility class.
Static Methods
resolveBuiltinResumeAdapters(KafkaConfiguration configuration) : PartitionAssignmentAdapter
Description:
Determines and returns an appropriate built-in partition assignment adapter based on the provided Kafka consumer configuration.Parameters:
configuration(KafkaConfiguration) – The Kafka component configuration object that contains consumer settings such as offset repository and seek policy.
Returns:
PartitionAssignmentAdapter– An instance of a partition assignment adapter that implements the resume strategy.
Behavior:
Checks if an offset repository is configured in the
KafkaConfiguration.If yes, returns an
OffsetPartitionAssignmentAdapterinitialized with the offset repository to resume consumption from the last committed offset.
Otherwise, checks if a seek policy is configured.
If yes, returns a
SeekPolicyPartitionAssignmentAdapterinitialized with the seek policy to resume consumption according to the seek strategy.
If neither is configured, returns a no-operation adapter (
NoOpPartitionAssignmentAdapter) which performs no special resume behavior.
Logging:
Logs debug and info messages indicating the chosen resume strategy.
Usage Example:
KafkaConfiguration config = ...; // assume configuration is set up PartitionAssignmentAdapter adapter = AssignmentAdapterHelper.resolveBuiltinResumeAdapters(config); // adapter can now be used to handle partition assignment resume logic
Important Implementation Details
Design Choice:
The helper class isfinalwith a private constructor, enforcing non-instantiability and signaling that it contains only static utility methods.Resume Strategy Selection Logic:
The methodresolveBuiltinResumeAdaptersencapsulates the decision-making process for selecting the partition assignment adapter based on the configuration. This helps centralize this logic and makes it easy to extend or modify the resume strategy resolution in one place.Logging:
Uses SLF4J for logging debug and informational messages to provide insight into which resume strategy is selected at runtime.Constants:
A singleton instance of the no-operation adapter is reused to avoid unnecessary instantiation.
Interaction with Other Components
KafkaConfiguration:
This class heavily depends on theKafkaConfigurationobject, which provides configuration data such as the offset repository (for offset management) and the seek policy (for resuming consumption from specific offsets or positions).PartitionAssignmentAdapter Interface and Implementations:
The returned object fromresolveBuiltinResumeAdaptersimplements thePartitionAssignmentAdapterinterface. Possible implementations include:OffsetPartitionAssignmentAdapter– Resumes from stored offsets.SeekPolicyPartitionAssignmentAdapter– Resumes based on a seek policy.NoOpPartitionAssignmentAdapter– Does nothing on partition assignment.
Kafka Consumer Lifecycle:
These adapters are typically invoked when Kafka partitions are assigned to the consumer during rebalancing, to control where consumption should resume.
Visual Diagram
The following Mermaid class diagram illustrates the structure and key relationships relevant to `AssignmentAdapterHelper.java`. It shows the utility class and the partition assignment adapters it returns based on configuration.
classDiagram
class AssignmentAdapterHelper {
-NO_OP_ASSIGNMENT_ADAPTER: NoOpPartitionAssignmentAdapter
-LOG: Logger
+resolveBuiltinResumeAdapters(configuration: KafkaConfiguration): PartitionAssignmentAdapter
}
class KafkaConfiguration {
+getOffsetRepository(): StateRepository<String, String>
+getSeekTo(): SeekPolicy
}
class PartitionAssignmentAdapter {
<<interface>>
+onPartitionsAssigned()
+onPartitionsRevoked()
}
class OffsetPartitionAssignmentAdapter {
-offsetRepository: StateRepository<String, String>
+onPartitionsAssigned()
+onPartitionsRevoked()
}
class SeekPolicyPartitionAssignmentAdapter {
-seekPolicy: SeekPolicy
+onPartitionsAssigned()
+onPartitionsRevoked()
}
class NoOpPartitionAssignmentAdapter {
+onPartitionsAssigned()
+onPartitionsRevoked()
}
AssignmentAdapterHelper --> PartitionAssignmentAdapter : returns
PartitionAssignmentAdapter <|-- OffsetPartitionAssignmentAdapter
PartitionAssignmentAdapter <|-- SeekPolicyPartitionAssignmentAdapter
PartitionAssignmentAdapter <|-- NoOpPartitionAssignmentAdapter
AssignmentAdapterHelper ..> KafkaConfiguration : uses
Summary
`AssignmentAdapterHelper.java` is a focused utility class that encapsulates the logic for selecting the appropriate built-in Kafka partition assignment adapter according to the consumer's configuration in Apache Camel. It supports offset-based resuming, seek-policy-based resuming, or a no-operation fallback, enabling flexible and modular handling of partition assignment resume strategies in the Kafka consumer lifecycle. The class enhances maintainability by centralizing this decision logic and aids in clean separation of concerns within the Kafka component's consumer support module.