Bản ghi cam kết của Cassandra cho phép ghi Cassandra bền. Khi bạn viết thư cho Cassandra, ghi được nối vào nhật ký cam kết trước khi ghi được ghi nhận cho máy khách. Điều này có nghĩa là tất cả các ghi rằng khách hàng nhận được một phản ứng thành công cho được đảm bảo được ghi vào nhật ký cam kết. Việc ghi cũng được thực hiện cho memtable hiện tại, mà cuối cùng sẽ được ghi vào đĩa như là một SSTable khi đủ lớn. Điều này có thể là một thời gian dài sau khi viết được thực hiện.
Tuy nhiên, nhật ký cam kết không được đồng bộ hóa ngay lập tức vào đĩa vì lý do hiệu suất. Mặc định là chế độ định kỳ (được đặt bởi tham số commitlog_sync trong cassandra.yaml) với khoảng thời gian 10 giây (được thiết lập bởi commitlog_sync_period_in_ms trong cassandra.yaml). Điều này có nghĩa là nhật ký cam kết được đồng bộ hóa với đĩa sau mỗi 10 giây. Với hành vi này, bạn có thể mất đến 10 giây viết nếu máy chủ mất điện. Nếu bạn có nhiều nút trong cụm của mình và đã sử dụng hệ số nhân rộng lớn hơn một nút, bạn sẽ cần mất nguồn cho nhiều nút trong vòng 10 giây để mất mọi dữ liệu.
Nếu cửa sổ rủi ro này không được chấp nhận, bạn có thể sử dụng chế độ hàng loạt cho nhật ký cam kết. Chế độ này sẽ không thừa nhận ghi cho máy khách cho đến khi nhật ký cam kết được đồng bộ hóa với đĩa. Cửa sổ thời gian được đặt bởi commitlog_sync_batch_window_in_ms, mặc định là 50 ms. Điều này sẽ làm tăng đáng kể độ trễ viết của bạn và có thể làm giảm thông lượng cũng như vậy chỉ sử dụng điều này nếu chi phí mất một vài ghi nhận được ghi nhận là cao. Nó là đặc biệt quan trọng để lưu trữ đăng nhập cam kết của bạn trên một ổ đĩa riêng biệt khi sử dụng chế độ này.
Trong trường hợp máy chủ của bạn bị mất nguồn, khi khởi động, Cassandra sẽ phát lại nhật ký cam kết để xây dựng lại memtable của nó. Quá trình này sẽ mất vài giây (có thể là phút) để viết các máy chủ nặng.
Nếu bạn muốn đảm bảo rằng dữ liệu trong memtables được ghi vào đĩa, bạn có thể chạy 'nodetool flush' (điều này hoạt động trên mỗi nút). Điều này sẽ tạo ra một SSTable mới và xóa các bản ghi cam kết đề cập đến dữ liệu trong các memtables đỏ bừng.
Cảm ơn bạn đã giải thích chi tiết và rất tốt bằng văn bản - bây giờ nó đã rõ ràng hơn rất nhiều.Tôi hy vọng điều này sẽ giúp những người mới khác như tôi. – user1680784
có vẻ như bạn có thể có 'batch' và 'periodic' backwards ... định kỳ là mặc định, để đưa ra lời cảm ơn chờ bạn chuyển sang hàng loạt, phải không? –
@Richard Tôi đang đối mặt với vấn đề này. Cassandra cam kết đăng nhập bị hỏng. Bất kỳ đề xuất? Tôi đã đăng câu hỏi ở đây: http://stackoverflow.com/questions/33304367/cassandra-exiting-due-to-error-while-processing-commit-log-during-initializatio – Dojo