Le journal de validation de Cassandra offre des écritures durables à Cassandra. Lorsque vous écrivez dans Cassandra, l'écriture est ajoutée au journal de validation avant que l'écriture ne soit reconnue au client. Cela signifie que chaque écriture pour laquelle le client reçoit une réponse réussie est garantie d'être écrite dans le journal de validation. L'écriture est également effectuée sur la memtable actuelle, qui sera éventuellement écrite sur le disque en tant que SSTable lorsqu'elle est suffisamment grande. Cela pourrait être long après l'écriture. Toutefois, le journal de validation n'est pas immédiatement synchronisé sur le disque pour des raisons de performances. La valeur par défaut est le mode périodique (défini par le paramètre commitlog_sync dans cassandra.yaml) avec une période de 10 secondes (définie par commitlog_sync_period_in_ms dans cassandra.yaml). Cela signifie que le journal de validation est synchronisé sur le disque toutes les 10 secondes. Avec ce comportement, vous pouvez perdre jusqu'à 10 secondes d'écritures si le serveur perd de la puissance. Si vous avez plusieurs nœuds dans votre cluster et que vous utilisez un facteur de réplication supérieur à un, vous devez perdre l'alimentation de plusieurs nœuds en moins de 10 secondes pour perdre des données.
Si cette fenêtre de risque n'est pas acceptable, vous pouvez utiliser le mode de traitement par lots pour le journal de validation. Ce mode ne reconnaît pas les écritures sur le client tant que le journal de validation n'a pas été synchronisé sur le disque. La fenêtre de temps est définie par commitlog_sync_batch_window_in_ms, la valeur par défaut est 50 ms. Cela augmentera significativement votre latence d'écriture et diminuera probablement aussi le débit, donc utilisez-le uniquement si le coût de la perte de quelques écritures reconnues est élevé. Il est particulièrement important de stocker votre journal de validation sur un lecteur distinct lorsque vous utilisez ce mode.
En cas de panne d'alimentation de votre serveur, Cassandra relance le journal de validation au démarrage pour reconstruire sa mémoire. Ce processus prendra quelques secondes (éventuellement des minutes) sur des serveurs très lourds.
Si vous souhaitez vous assurer que les données contenues dans les memtables sont écrites sur le disque, vous pouvez exécuter 'nodetool flush' (ceci fonctionne par noeud). Cela créera un nouveau SSTable et supprimera les journaux de validation faisant référence aux données dans les memtables vidées.
Merci pour l'explication détaillée et très bien écrite - c'est beaucoup plus clair maintenant.J'espère que cela aidera d'autres débutants comme moi aussi. – user1680784
il semble que vous ayez "batch" et "périodique" en arrière ... periodique est la valeur par défaut, pour faire des accusés de réception, attendez que vous passiez en batch, oui? –
@Richard Je suis confronté à ce problème. Cassandra commit log est corrompu. Aucune suggestion? J'ai posté une question ici: http://stackoverflow.com/questions/33304367/cassandra-exiting-due-to-error-while-processing-commit-log-during-initializatio – Dojo