1. Mở đầu
Việc đảm bảo độ tin cậy và tính sẵn sàng của dữ liệu là yếu tố cốt lõi. Để làm được điều này, Kafka sử dụng cơ chế sao lưu bản sao (replica) và các cấu hình đặc biệt cho broker nhằm giảm thiểu rủi ro mất dữ liệu và đảm bảo hiệu suất. Bài viết này sẽ cung cấp cái nhìn chi tiết về vai trò của replica và các thiết lập cấu hình broker, giúp anh em hiểu rõ hơn về cách Kafka duy trì tính toàn vẹn và độ tin cậy của dữ liệu trong môi trường phân tán.
2. Phân tích độ tin cậy
Độ tin cậy là một thuộc tính của toàn bộ hệ thống—không phải chỉ của một thành phần riêng lẻ—vì vậy khi chúng ta nói về các đảm bảo tin cậy của Apache Kafka, chúng ta cần ghi nhớ toàn bộ hệ thống và các trường hợp sử dụng của nó. Về độ tin cậy, các hệ thống tích hợp với Kafka quan trọng không kém gì bản thân Kafka. Và vì độ tin cậy là mối quan tâm của cả hệ thống, nên không thể chỉ thuộc trách nhiệm của một cá nhân. Mọi người—quản trị viên Kafka, quản trị viên Linux, quản trị viên mạng và lưu trữ, cùng các nhà phát triển ứng dụng—đều phải phối hợp với nhau để xây dựng một hệ thống đáng tin cậy.
Apache Kafka rất linh hoạt về khả năng đảm bảo việc truyền tải dữ liệu tin cậy. Chúng ta hiểu rằng Kafka có nhiều trường hợp sử dụng, từ theo dõi các lần nhấp chuột trên trang web đến xử lý thanh toán bằng thẻ tín dụng. Một số trường hợp sử dụng yêu cầu độ tin cậy tuyệt đối, trong khi những trường hợp khác ưu tiên tốc độ và sự đơn giản hơn là độ tin cậy. Kafka được viết để đủ khả năng cấu hình và API của nó cũng đủ linh hoạt để cho phép thực hiện mọi loại đánh đổi về độ tin cậy.
Vì tính linh hoạt của nó, cũng rất dễ để vô tình gặp phải sự cố khi sử dụng Kafka—tin rằng hệ thống của chúng ta là đáng tin cậy trong khi thực tế thì không. Trong series này, chúng ta sẽ bắt đầu bằng việc nói về các loại độ tin cậy khác nhau và ý nghĩa của chúng trong ngữ cảnh của Apache Kafka. Sau đó, chúng ta sẽ nói về cơ chế sao chép của Kafka và cách nó đóng góp vào độ tin cậy của hệ thống. Tiếp theo, chúng ta sẽ thảo luận về các broker và topic của Kafka và cách cấu hình chúng cho các trường hợp sử dụng khác nhau. Sau đó, chúng ta sẽ thảo luận về các client, producer và consumer, và cách chúng nên được sử dụng trong các kịch bản độ tin cậy khác nhau. Cuối cùng, chúng ta sẽ bàn về việc xác thực độ tin cậy của hệ thống, vì không chỉ đơn giản là tin tưởng rằng hệ thống là đáng tin cậy—giả định này phải được kiểm tra kỹ lưỡng.
Đầu tiên chúng ta sẽ phân tích về độ tin cậy trong ngữ cảnh của apache kafka nhé.
Khi chúng ta nói về độ tin cậy, chúng ta thường nhắc đến những sự đảm bảo, đó là những hành vi mà hệ thống đảm bảo sẽ luôn được duy trì trong các tình huống khác nhau.
Đảm bảo độ tin cậy nổi tiếng nhất có lẽ là ACID, đây là tiêu chuẩn độ tin cậy mà các cơ sở dữ liệu quan hệ luôn hỗ trợ. ACID đại diện cho tính nguyên tử (atomicity), tính nhất quán (consistency), tính cô lập (isolation) và tính bền vững (durability). Khi một nhà cung cấp cho biết cơ sở dữ liệu của họ tuân thủ ACID, điều này có nghĩa là cơ sở dữ liệu đảm bảo các hành vi nhất định liên quan đến giao dịch (transaction)
Những sự đảm bảo (hay cam kết về cách hoạt động) của các cơ sở dữ liệu quan hệ, như tuân thủ các quy tắc ACID, là lý do tại sao chúng ta tin tưởng sử dụng chúng cho những ứng dụng quan trọng nhất. Bởi vì những cam kết đó nói rõ hệ thống sẽ hành xử ra sao trong những tình huống nhất định (như khi có lỗi hoặc sự cố xảy ra), chúng ta có thể dự đoán được hành vi của hệ thống. Khi chúng ta hiểu rõ những đảm bảo này, chúng ta có thể viết các ứng dụng an toàn dựa trên việc biết trước hệ thống sẽ hoạt động ổn định và đúng cách trong mọi trường hợp mà nó hứa hẹn. Điều này tạo sự tin tưởng rằng dữ liệu sẽ được xử lý một cách đáng tin cậy và nhất quán.
Hiểu các đảm bảo mà Kafka cung cấp là điều quan trọng đối với những người muốn xây dựng các ứng dụng đáng tin cậy. Việc hiểu biết này cho phép các nhà phát triển hệ thống xác định cách hệ thống sẽ hoạt động trong các điều kiện gặp sự cố khác nhau. Vậy, Apache Kafka đảm bảo điều gì?
- Kafka đảm bảo thứ tự của các message trong một partition. Nếu message B được ghi sau message A, sử dụng cùng một producer trong cùng một partition, thì Kafka đảm bảo rằng offset của message B sẽ lớn hơn offset của message A, và consumer sẽ đọc message B sau message A.
- Các message produce coi là "commited khi chúng đã được ghi vào partition trên tất cả các in-sync replicas (nhưng không nhất thiết phải được ghi vào đĩa). Các producer có thể chọn nhận xác nhận của các message đã gửi khi message được cam kết hoàn toàn, khi nó được ghi vào leader replicase, hoặc khi nó được gửi qua network.
- Các message commited sẽ không bị mất miễn là ít nhất một bản sao vẫn hoạt động.
- Consumer chỉ có thể đọc các message commited.
Những đảm bảo cơ bản này có thể được sử dụng khi xây dựng một hệ thống đáng tin cậy, nhưng tự bản thân chúng không làm cho hệ thống hoàn toàn đáng tin cậy. Có những sự đánh đổi khi xây dựng một hệ thống đáng tin cậy, và Kafka được xây dựng để cho phép các quản trị viên và nhà phát triển quyết định mức độ tin cậy mà họ cần bằng cách cung cấp các tham số cấu hình giúp kiểm soát các sự đánh đổi này. Các sự đánh đổi thường liên quan đến mức độ quan trọng của việc lưu trữ message một cách tin cậy và nhất quán so với các yếu tố quan trọng khác, chẳng hạn như tính khả dụng, thông lượng cao, độ trễ thấp và chi phí phần cứng.
Trong các bài viết kế tiếp chúng ta sẽ xem xét cơ chế sao chép của Kafka, giới thiệu một số thuật ngữ và thảo luận về cách Kafka xây dựng tính tin cậy. Sau đó, chúng ta sẽ đi qua các tham số cấu hình vừa được đề cập.
3. Thông tin kết nối
Nếu anh em muốn trao đổi thêm về bài viết, hãy kết nối với mình qua LinkedIn và Facebook:
- LinkedIn: https://www.linkedin.com/in/nguyentrungnam/
- Facebook: https://www.facebook.com/trungnam.nguyen.395/
Rất mong được kết nối và cùng thảo luận!