...
A class representing (or bounding) a processing state position in terms of its inputs: a vector or (topic, partition, offset) components. When used as a bound, it can also represent special "unbounded" or "latest" bounds.
Code Block |
---|
@Evolving
public interface Position {
// Create a new Position from a map of topic -> partition -> offset
static Position fromMap(Map<String, Map<Integer, Long>> map);
// Create a new Position bound representing only the latest state
static Position latestMarker();
// Create a new Position bound representing "no bound"
static Position unbounded();
// Create a new, empty Position
static Position emptyPosition();
// Return a new position based on the current one, with the given component added
Position withComponent(String topic, int partition, long offset);
// Merge all the components of this position with all the components of the other
// position and return the result in a new Position
Position merge(Position other);
// Check whether this is a "latest" Position bound
boolean isLatestMarker();
// Check whether this is an "unbounded" Position bound
boolean isUnbounded();
// Get the set of topics included in this Position
Set<String> getTopics();
// Given a topic, get the partition -> offset pairs included in this Position
Map<Integer, Long> getBound(String topic);
} |
...
Compatibility, Deprecation, and Migration Plan
Since this is a completely new set of APIs, no backward compatibility concerns are anticipated. Existing IQ usages will be free to migrate to the new IQv2 queries as they become available. .
Rejected Alternatives
Deprecation of the existing IQ API will be considered and proposed in a later KIP after IQv2 is determined to be feature complete, ergonomic, and performant enough to serve existing use cases.
Since the scope of this KIP is so large, we plan a short period of interface instability (during which all the IQv2 APIs are marked @Evolving
) in case we discover a need to change this proposal. During this time, we will have the option to break compatibility in major (eg 4.0) or minor (eg 3.1), but not bugfix (eg 3.0.1) releases. We hope not to make use of this option, though. We plan to drop these annotations (in a later KIP) once IQv2 is complete enough to have confidence in the current design.
Since nothing is deprecated in this KIP, users have no need to migrate unless they want to.
Rejected Alternatives
Incrementally improve the current IQ API
Some of the motivating problems could be addressed within the scope of the current IQ API, but many are inherent in the current API's design. The full set of problems convinced us that it's time for a new API...