[
https://issues.apache.org/jira/browse/KAFKA-21111?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Matthias J. Sax updated KAFKA-21111:
------------------------------------
Description:
We need to ensure that the refiner assigns warm-up task only to new clients,
RPC version 1+, but not to old RPC version 0 clients (4.2/4.3 release).
Older clients don't report task-offsets, and thus we cannot use warmup tasks
because w/o the ability to observe their restore progress, we could never
promote them as active later.
Note one corner case: after a GC fail-over, a member might not have send a
heartbeat yet, and thus we don't know it's RPC version yet. Atm, the code
treats this incorrectly, and would optimistically assume that it's a v1 client
and that we can put warmup task on the client. This must be change to being
conservative and treating "unknown" as don't put warmup tasks on the client.
The high level idea is, to add new transient field to `StreamsGroup` to track
the RPC version. The tricky part is, that the refiner is computing an
intermediate assignment for the whole group, ie, if might be invoked on a v1
heartbeat, that there could still be v0 members in the group. So we could give
the individual member's RPC version into the refiner, and the refiner would
avoid to put a warmup on older client.
was:
We need to ensure that the refiner is only executed for new clients, RPC
version 1+, but not for old RPC version 0 clients (4.2/4.3 release).
Older clients don't report task-offsets, and thus we cannot use warmup tasks
because w/o the ability to observe their restore progress, we could never
promote them as active later.
Note one corner case: after a GC fail-over, a member might not have send a
heartbeat yet, and thus we don't know it's RPC version yet. Atm, the code
treats this incorrectly, and would optimistically assume that it's a v1 client
and that we can put warmup task on the client. This must be change to being
conservative and treating "unknown" as don't put warmup tasks on the client.
The high level idea is, to add new transient field to `StreamsGroup` to track
the RPC version. The tricky part is, that the refiner is computing an
intermediate assignment for the whole group, ie, if might be invoked on a v1
heartbeat, that there could still be v0 members in the group. So we could give
the individual member's RPC version into the refiner, and the refiner would
avoid to put a warmup on older client.
> Ensure refiner backward compatibility
> -------------------------------------
>
> Key: KAFKA-21111
> URL: https://issues.apache.org/jira/browse/KAFKA-21111
> Project: Kafka
> Issue Type: Sub-task
> Components: group-coordinator, streams
> Reporter: Matthias J. Sax
> Assignee: Matthias J. Sax
> Priority: Critical
>
> We need to ensure that the refiner assigns warm-up task only to new clients,
> RPC version 1+, but not to old RPC version 0 clients (4.2/4.3 release).
> Older clients don't report task-offsets, and thus we cannot use warmup tasks
> because w/o the ability to observe their restore progress, we could never
> promote them as active later.
> Note one corner case: after a GC fail-over, a member might not have send a
> heartbeat yet, and thus we don't know it's RPC version yet. Atm, the code
> treats this incorrectly, and would optimistically assume that it's a v1
> client and that we can put warmup task on the client. This must be change to
> being conservative and treating "unknown" as don't put warmup tasks on the
> client.
> The high level idea is, to add new transient field to `StreamsGroup` to track
> the RPC version. The tricky part is, that the refiner is computing an
> intermediate assignment for the whole group, ie, if might be invoked on a v1
> heartbeat, that there could still be v0 members in the group. So we could
> give the individual member's RPC version into the refiner, and the refiner
> would avoid to put a warmup on older client.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)