risposta

31

Dipende da cosa intendi per "bloccato". Se intendi "le connessioni esistenti sono chiuse quando viene attivato il ribilanciamento", la risposta è sì. L'attuale algoritmo di riequilibrio di Kafka è sfortunatamente imperfetto.

Ecco cosa succede durante il riequilibrio dei consumi.

Supponiamo di avere un argomento con 10 partizioni (0-9) e un utente (chiamiamolo consumer1) consumandolo. Quando viene visualizzato un secondo consumatore (consumer2), il task di ribilanciamento si attiva per entrambi (consumer1 ottiene un evento, consumer2 esegue il ribilanciamento iniziale). Ora consumer1 chiude tutte le connessioni esistenti (anche quelle che verranno riaperte presto) e rilascia la proprietà della partizione in Zookeeper per tutte e 10 le partizioni.

Quindi esegue l'algoritmo di assegnazione della partizione e decide quali partizioni devono essere richieste e richiede nuovamente la proprietà della partizione in Zookeeper. Se il reclamo ha avuto esito positivo, consumer1 avvia il recupero delle sue nuove partizioni.

Nel frattempo consumer2 esegue anche l'algoritmo di assegnazione delle partizioni e tenta di rivendicare anche le sue partizioni in Zookeeper. Il reclamo avrà esito positivo solo quando consumer1 rilascia la proprietà su queste partizioni. Quando il reclamo va a buon fine, consumer2 inizia il recupero, o se non riesce a rivendicare partizioni entro una determinata quantità di tentativi, si ottiene un'eccezione rebalance failed after n retries.

Come si è notato invece di chiudere solo le connessioni e rilasciare la proprietà per le partizioni consumer1 non possiede più, chiude inutilmente TUTTE le sue connessioni e si riavvia con una quantità inferiore di partizioni. La stessa storia con l'aggiunta di partizioni (quando si utilizza un filtro con caratteri jolly e viene visualizzato un nuovo argomento): TUTTE le connessioni vengono chiuse e quindi aperte di nuovo anziché aprirne di nuove.

Quindi spero che questo risponda alla tua domanda: il recupero si interrompe quando il riequilibrio entra in azione.