[ https://issues.apache.org/jira/browse/KAFKA-13111?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17384526#comment-17384526 ]
Jason Gustafson commented on KAFKA-13111: ----------------------------------------- Thanks, this makes sense to me. At a high level, we want to keep the protocol simple even if it costs a little more complexity in the implementation. I think it is indeed simpler if topic IDs are handled similarly to topic names. When a topic ID is unknown, we nevertheless store it in the session and keep sending the client UNKNOWN_TOPIC_ID until it gets removed through the forgotten topic list or the broker learns the topic name mapping from the controller. > Re-evaluate Fetch Sessions when using topic IDs > ----------------------------------------------- > > Key: KAFKA-13111 > URL: https://issues.apache.org/jira/browse/KAFKA-13111 > Project: Kafka > Issue Type: Improvement > Affects Versions: 3.1.0 > Reporter: Justine Olshan > Assignee: Justine Olshan > Priority: Major > > For fetch request version 13 we have the current method of handling unknown > topic IDs. > * When the receiving broker sees an unknown topic ID in a request or > encounters an inconsistent (mismatched) ID in the logs, it sends a top-level > error back, delays *all* partitions (in fetcher thread), and closes the > session > Ideally, we want to handle the same way as unknown topic names. We hold the > topic partition in the session and try to resolve on a future fetch request. > However, there are a few complications with this approach and this is why we > opted to simply close the session. One is that many objects in the fetch > session are keyed using topic name+partition. We also still need the topic > name for a few other checks in the fetch path. > Still, upon further inspection, closing the session on any new topics (when > using topic names, we often see a few unknown topic or partition exceptions) > is not ideal. > One way to see similar behavior in the topic ID case is to store unresolved > IDs in the session. For compatibility reasons, we will need to add and/or > generify a few classes. The general idea is that for sessions using version > 13+ we will use a structure that keys using topic ID and partition with an > optional name. That way, we can send partition level errors for unknown topic > IDs and handle them later in the same session. We can also remove partitions > using topic ID more easily if the unknown topic ID was due to stale metadata. > Then the new method will be as follows: > * When the receiving broker sees an unknown topic ID in a request or > encounters an inconsistent (mismatched) ID in the logs, it sends an error on > the unknown partition, delay *only those* partitions (in fetcher thread), and > keep the session open to try to resolve in the future -- This message was sent by Atlassian Jira (v8.3.4#803005)