@startuml hide empty description [*] --> NOT_IN_GROUP NOT_IN_GROUP ---> UNJOINED : Consumer.subscribe() UNJOINED ---> UNJOINED : Heartbeat on retries UNJOINED ---> STABLE : Heartbeat, epoch = 0 UNJOINED ---> FATAL STABLE ---> RECONCILING : new assignment received\ntrigger callbacks STABLE ---> RECONCILING : Consumer.unsubscribe() STABLE ---> RELEASING_ASSIGNMENT : on HB fencing error, reset epoch,\ntrigger callbacks STABLE ---> FATAL STABLE ---> STABLE : Heartbeat RECONCILING ---> RECONCILING : Heartbeat RECONCILING ---> RECONCILIATION_COMPLETE : callback completed RECONCILIATION_COMPLETE ---> STABLE : Send heartbeat w/ full assignment,\nreset interval timer to\nheartbeat.interval.ms RECONCILIATION_COMPLETE ---> STABLE : Send heartbeat w/ full assignment,\nreset interval timer to\nheartbeat.interval.ms RECONCILIATION_COMPLETE ---> UNJOINED : unsubscribe() RELEASING_ASSIGNMENT ---> RELEASING_ASSIGNMENT_COMPLETE : 'onLost' callback completed RELEASING_ASSIGNMENT_COMPLETE ---> UNJOINED : Send out-of-interval HB RELEASING_ASSIGNMENT ---> FATAL FATAL ---> [*] @enduml |