Dziennik zatwierdzeń Cassandry zawiera trwałe napisy Cassandry. Kiedy piszesz do Cassandry, zapis jest dołączany do dziennika zatwierdzeń, zanim potwierdzenie zostanie potwierdzone klientowi. Oznacza to, że każdy zapis, że klient otrzyma pomyślną odpowiedź, zostanie zapisany w dzienniku zatwierdzenia. Zapis jest również wprowadzany do bieżącego pliku memtable, który zostanie ostatecznie zapisany na dysk jako SSTable, gdy będzie wystarczająco duży. Może to być dużo czasu po napisaniu.
Jednak dziennik zatwierdzeń nie jest natychmiast synchronizowany z dyskiem ze względu na wydajność. Wartością domyślną jest tryb okresowy (ustawiony przez parametr commitlogsync w pliku cassandra.yaml) z okresem 10 sekund (ustawiany przez commitlog_sync_period_in_ms w pliku cassandra.yaml). Oznacza to, że dziennik zatwierdzania jest zsynchronizowany z dyskiem co 10 sekund. Przy takim zachowaniu można stracić do 10 sekund zapisu, jeśli serwer straci moc. Jeśli masz wiele węzłów w klastrze i użyłeś współczynnika replikacji większego niż jeden, musisz stracić moc do wielu węzłów w ciągu 10 sekund, aby utracić jakiekolwiek dane.
Jeśli to okno ryzyka nie jest akceptowalne, można użyć trybu wsadowego w dzienniku zatwierdzania. Ten tryb nie zatwierdza zapisów do klienta, dopóki dziennik zatwierdzeń nie zostanie zsynchronizowany z dyskiem. Okno czasu jest ustawione przez commitlog_sync_batch_window_in_ms, domyślnie jest to 50 ms. To znacznie zwiększy opóźnienie zapisu i prawdopodobnie zmniejszy przepustowość, więc używaj tego tylko wtedy, gdy koszt utraty kilku potwierdzonych zapisów jest wysoki. Szczególnie ważne jest przechowywanie dziennika zatwierdzeń na oddzielnym dysku podczas korzystania z tego trybu.
W przypadku, gdy serwer traci moc, przy uruchomieniu Cassandra ponownie wyświetla dziennik zatwierdzenia, aby odbudować jego zapis. Proces ten zajmie sekundy (być może minuty) na bardzo ciężkich serwerach zapisu.
Jeśli chcesz się upewnić, że dane w memtables są zapisane na dysku, możesz uruchomić "nodetool flush" (działa to na węzeł). Spowoduje to utworzenie nowej SSTable i usunięcie dzienników zatwierdzeń odnoszących się do danych w opróżnionych memtables.
Dziękuję za szczegółowe i bardzo dobrze napisane wyjaśnienie - teraz jest o wiele jaśniej.Mam nadzieję, że pomoże to innym początkującym, takim jak ja. – user1680784
Wygląda na to, że możesz mieć "batch" i "periodic" do tyłu ... okresowa jest domyślna, aby potwierdzenia czekać, przełączysz się na partię, tak? –
@Richard Mam do czynienia z tym problemem. Dziennik zatwierdzania Cassandra jest uszkodzony. Jakieś sugestie? Zadałem tutaj pytanie: http://stackoverflow.com/questions/33304367/cassandra-exiting-due-to-error-while-processing-commit-log-during-initializatio – Dojo