Nella topologia Storm, durante l'elaborazione di uno stream, desidero ritardare l'elaborazione di alcuni messaggi fino ad alcuni punti futuri nel tempo. Quali sono alcune opzioni ragionevoli per farlo?Elaborazione ritardata coda/messaggio in Storm
Finora, ho pensato al seguente:
- Utilizzo di Java di
Thread.sleep
. (Tuttavia, sulla base di alcune discussioni, questo non è un metodo consigliato per utilizzare efficacemente le risorse di Storm.) - Utilizzare una coda ritardata ...
- In particolare, provare java.util.concurrent.DelayQueue.
- Esistono altre implementazioni che vale la pena provare?
- Storm ha qualche API per ritardare un messaggio che ho trascurato?
- ZeroMQ fornisce un'API di messaggistica in ritardo che Storm (se modificata) potrebbe sfruttare?
puoi dare qualche idea del perché vuoi farlo? se non sei pronto per elaborare questa roba, perché stai passando alla topologia della tempesta per cominciare? –
La mia prima risposta: perché chiedere perché? È importante capire o rispondere alla domanda? Ci sono molti motivi per cui è utile ritardare (o riprogrammare) una tupla. La mia elaborazione di tuple non riguarda esclusivamente trasformazioni puramente funzionali dei dati. Nel mio caso, elaborare una tupla implica catturare lo stato di qualcosa al di fuori del sistema e integrarlo con altri flussi. Dal momento che cambia nel tempo, voglio catturare quello stato a intervalli controllati. Uno di questi è non consumare troppo spesso una risorsa esterna. –