[
https://issues.apache.org/jira/browse/KAFKA-4253?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Guozhang Wang updated KAFKA-4253:
---------------------------------
Assignee: (was: Matthias J. Sax)
> Fix Kafka Stream thread shutting down process ordering
> ------------------------------------------------------
>
> Key: KAFKA-4253
> URL: https://issues.apache.org/jira/browse/KAFKA-4253
> Project: Kafka
> Issue Type: Bug
> Components: streams
> Affects Versions: 0.10.1.0
> Reporter: Guozhang Wang
>
> Currently we close the stream thread in the following way:
> 0. Commit all tasks.
> 1. Close producer.
> 2. Close consumer.
> 3. Close restore consumer.
> 4. For each task, close its topology processors one-by-one following the
> topology order by calling {{processor.close()}}.
> 5. For each task, close its state manager as well as flushing and closing all
> its associated state stores.
> We choose to close the producer / consumer clients before shutting down the
> tasks because we need to make sure all sent records has been acked so that we
> have the right log-end-offset when closing the store and checkpointing the
> offset of the changelog. However there is also an issue with this ordering,
> in which users choose to write more records in their {{processor.close()}}
> calls, this will cause RTE since the producers has already been closed, and
> no changelog records will be able to write.
> Thinking about this issue, a more appropriate ordering will be:
> 1. For each task, close their topology processors following the topology
> order by calling {{processor.close()}}.
> 2. For each task, commit its state by calling {{task.commit()}}. At this time
> all sent records should be acked since {{producer.flush()}} is called.
> 3. For each task, close their {{ProcessorStateManager}}.
> 4. Close all embedded clients, i.e. producer / consumer / restore consumer.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)