asynchronous programming.

Vấn đề giải quyết client và server vẫn giao tiếp trực tiếp nhưng không chờ đợi nhau. Client có thể làm việc riêng tùy thích trong khoảng thời gian đó, và được thông báo khi server xử lý xong yêu cầu.




Message Broker
Message-driven programming bắt nguồn từ tư tưởng Server và client không giao tiếp trực tiếp với nhau nữa. Tất cả các request sẽ được gửi dưới dạng message cho bên thứ 3. Bên thứ 3 (Message Broker) có nhiệm vụ điều hướng các message đến địa chỉ cụ thể 



Message distribution patterns

Message broker cung cấp 2 patterns chính để cung cấp việc điều hướng message
   Nhắn tin hai người có thể dùng queue.
   Khi nhắn tin trong group thì dùng topic.



Mô hình sử dụng Message broker
   Producer/Publisher: nơi gửi message.
   Message broker: hệ thống điều hướng message.
   Consumer/Subcriber: nơi nhận message.



Phân chia Message broker theo cách thức hoạt động

   Với các bài toán yêu cầu đảm bảo Consumer đều nhận được một message và duy nhất một lần nhận là quan trọng nhất, ta sử dụng Message base.
   Các bài toán yêu cầu sự chính xác cao và đảm bảo không lost message thì cân nhắc sử dụng Data pipeline.
Message baseData pipeline
ActiveMQ, RabbitMQ, ZeroMQRocketMQ, Kafka
Lưu trạng thái của Consumer để đảm bảo tất cả đều nhận được message từ topic đang subscribe.Không lưu trạng thái của Consumer.
Message bị xóa sau khi các Consumer nhận được message.Message chưa bị xóa ngay sau khi Consumer nhận message.
Khi có message mới, Consumer chỉ lấy được duy nhất message đó.Consumer có thể tùy ý lựa chọn lấy về một danh sách các message, bao gồm cả message cũ.


Topic, Partition và offset

Message được lưu tại offset của partitionpartition được lưu ở topic, Topic được lưu trữ trên file, trên disk, và tất cả đều được lưu trữ trên server. Và server là một Kafka broker trong Kafka cluster.


Kafka broker

    Có thể hiểu Kafka cluster là nhiều server tập trung lại thành một cụm làm việc với nhau - multi-brokers (multi-servers). Khi connect đến bất kì broker nào trong mạng Kafka cluster, chúng ta sẽ connect tới toàn bộ mạng cluster đó. Không quan tâm cluster có bao nhiêu broker.




Kafka broker & topic

Để đảm bảo high reliable, Kafka tự động phân tán các partition trên tất cả broker đang có. Mỗi partition nằm trên một brokerTopic-A có 3 partition nằm trên các broker nào mà không phụ thuộc thứ tự.


Topic được lưu trữ ở log file phân chia thành các segment khác nhau.



Leader partition concept

  • Tại một thời điểm, mỗi partition có duy nhất một replication leader.
  • Chỉ có thể read/write message từ replication leader.
  • Các replication còn lại được gọi là ISR, đồng bộ message từ replication leader.
  • Do vậy, mỗi partition có duy nhất một replication leader và một hoặc nhiều ISR - in-sync replica.






Producer

Producer là người gửi message đến Message broker. Cụ thể với Kafka, producer write data vào partition của topic.

Trong trường hợp gửi message đến topic mà không chỉ định partitionproducer sẽ gửi message đến broker theo cơ chế round-robin.

Message đầu tiên đi vào broker 101, message thứ hai đi vào broker 102, message tiếp theo đi vào broker 103... cứ như vậy, các message được write balance giữa các broker.




Consumer

Có gửi thì có nhận, và consumer là đầu nhận message.

  • Consumer đọc message từ topic, xác định bằng topic name.
  • Đồng thời, consumer biết nên đọc message từ broker nào. Trong trường hợp chưa read xong mà broker gặp sự cố, consumer cũng có cơ chế tự phục hồi.
  • Việc đọc message trong một partition diễn ra tuần tự để đảm bảo message ordering. Có nghĩa là consumer không thể đọc message offset=3 khi chưa đọc message offset=2.
  • Một consumer cũng có thể đọc message từ một hoặc nhiều hoặc tất cả partition trong một topic.





Consumer group

Quay lại phần trước, consumer là nơi đọc message từ topic. Có nghĩa là một consumer có thể đọc toàn bộ message của tất cả partition thuộc cùng topic.

Nếu số lượng producer tăng lên và đồng thời gửi message đến tất cả partition trong khi chỉ có duy nhất một consumer thì khả năng xử lý sẽ rất chậm, có thể dẫn tới bottle-neck. Giải pháp là tăng số lượng consumer, các consumer có thể xử lý đồng thời message từ nhiều partition. Và tất cả các consumer sẽ thuộc cùng một nhóm được gọi là consumer group.


























































https://viblo.asia/s/apache-kafka-tu-zero-den-one-aGK7jPbA5j2