Publish/Subscribe messaging

Trước khi luận bàn về các chi tiết cụ thể của Apache Kafka , bọn họ cần hiểu rõ cấu trúc của pub/sub messaging và lý do nó lại đặc trưng .

Bạn đang xem: Kafka là gì

Publish/subscribe messaging là 1 pattern mà đặc trưng bởi vấn đề gửi (publisher) data (message) mà ko chỉ định người nhận rõ ràng . Vắt vào đó tín đồ gửi sẽ phân loại tin nhắn thành các lớp và bằng phương pháp nào này mà người nhận (subscriber) buộc phải đăng kí vào lớp khăng khăng để nhấn tin nhắn ở lớp đấy. Khối hệ thống pub/sub thông thường có một broker (nhà phân phối) , là trung tâm nơi mà các message được phân phối.

Bắt đầu như thế nào nhỉ

Có rất nhiều use case mang đến Pub/sub ,đơn giản tuyệt nhất là hãy bước đầu với một hàng chờ tin nhắn ( message queue ) hay những kênh tiếp xúc giữa những tiến trình ( interprocess communication channel) .Ví dụ: các bạn tạo một ứng dụng cần gửi tài liệu để theo dõi và quan sát các hoạt động vui chơi của trang web chẳng hạn như vậy các bạn tạo kết nối trực tiếp từ bỏ trang web của bản thân mình đến một ứng dụng có thể hiển thị số liệu kia lên một bảng để có thể theo dõi . Ví dụ như trong hình đây


*

Đây chỉ là một trong ví dụ dễ dàng và đơn giản khi mới ban đầu với vấn đề theo dõi dữ liệu. Sau này bạn quyết định thử phân tích dữ liệu trong thời hạn dài cùng vs mô hình hiện tại thì chuyển động không giỏi . Thế cho nên bạn sẽ bắt đầu cần một service mà có thể nhận các số liệu , tàng trữ chúng, những thống kê chúng. Để cung ứng điều này, các bạn sửa thay đổi ứng dụng của chính bản thân mình để hoàn toàn có thể gửi dữ liệu cho cả hai hệ thống. Bởi thế hiện giờ bạn bao gồm thêm các ứng dụng new mà sẽ khởi tạo ra tài liệu .Và tất nhiên nó cũng rất cần phải tạo kết nối y hệt như service trước . Từ từ do nhu cầu mà các bạn sẽ có nhiều ứng dụng và service để giao hàng các mục tiêu khác nhau


*

( ôi mắt của mình )

Sự chưa ổn của nghệ thuật xây dựng khối hệ thống này là rõ ràng, vì chưng vậy bạn đưa ra quyết định phải làm những gì đó. Bạn tùy chỉnh thiết lập một vận dụng duy tốt nhất nhận tài liệu từ tất cả các vận dụng ngoài và cung cấp một sever để gia hạn và truy nã vấn các dữ liệu kia cho ngẫu nhiên hệ thống nào yêu cầu chúng.


*

Individual Queue Systems ( khối hệ thống xếp hàng cá nhân )

Tại cùng 1 thời điểm bạn muốn tiến hành các chuyển động khác như bình chọn hay cung ứng các hành vi của người tiêu dùng trên trang web của người sử dụng cho đa số nhà cải cách và phát triển ML để thu tập với phân tích thói quen người sử dụng . Và rồi bạn nhận thấy sự tương đương nhau của các khối hệ thống đó với hình tiếp sau đây thể hiện tới 3 mô hình pub/sub systems


*

Bằng biện pháp này sẽ xuất sắc hơn nhiều là tận dụng các kết nối point to point nhưng nó lại tồn tại các sự tái diễn . Giả sử như công ty của bạn đang duy trì nhiều hệ thống queuing data (tất cả đều phải sở hữu lỗi và giới hạn riêng) . Bạn cũng biết rằng sẽ sớm có rất nhiều trường hợp thực hiện message bắt đầu trong tương lai. Bởi thế bạn muốn có một khối hệ thống tập trung duy nhất cho phép tạo ra phổ biến một loại dữ liệu mà có thể phát triển khi doanh nghiệp của người tiêu dùng phát triển

Kafka là gì ?

Apache Kafka là một khối hệ thống publish/subscribe messaging có phong cách thiết kế để giải quyết và xử lý vấn đề này. Nó thường được tế bào tả như thể một khối hệ thống “phân phối các commit log” hay vừa mới đây còn đc gọi là 1 trong “nền tảng phân phối stream”. đọc nôm mãng cầu là một khối hệ thống file hoặc cơ sở tài liệu về commit log có thiết kế để cung cấp một phiên bản ghi chắc chắn về tất cả các transaction để rất có thể tạo phải tính nhất quán của hệ thống, dữ liệu trong Kafka được tàng trữ lâu dài, theo sản phẩm công nghệ tự . Ko kể ra, dữ liệu hoàn toàn có thể được cung cấp trong khối hệ thống để hỗ trợ các biện pháp đảm bảo an toàn hay bổ sung để kháng lại những lỗi khối hệ thống khiến tài liệu ko tuyệt nhất quán, cũng giống như các kĩ năng để scaling hiệu suất.

Messages & Batches

Đơn vị tài liệu trong Kafka được hotline là message .Nếu các bạn tiếp cận Kafka từ góc nhìn của căn nguyên cơ sở dữ liệu, chúng ta có thể nghĩ về message tương tự như một row hoặc một record.Một message chỉ đơn giản dễ dàng là một mảng byte , vì chưng vậy tài liệu chứa trong đó không tồn tại định dạng cụ thể hoặc ý nghĩa sâu sắc . Một message rất có thể có một tùy chọn bit of metadata, được gọi là 1 trong những khóa ( nghĩa là loại bit này là khóa của metadata :v ). Khóa này cũng là một trong mảng byte và cũng như message nó ko có chân thành và ý nghĩa cụ thể như thế nào cả.Các key được thực hiện khi message được ghi vào các phân vùng khác biệt một cách dễ kiểm soát điều hành hơn. Đơn giản nhất là tạo nên một hàm băm đồng nhất của key và sau đó cho vào phân vùng bao gồm số là kết quả sau khi băm của key. Điều này đảm bảo an toàn rằng các tin nhắn có cùng khóa luôn được ghi vào những vùng giống như nhau.

Để hiệu quả, message được viết vào Kafka theo đợt( Batches ). Batch chỉ là 1 tập hợp các message, tất cả chúng đã được tạo nên cho và một topic ( chủ thể ) cùng partition ( phân vùng) .Cứ mỗi message mà cứ chạy trơ tráo trên mạng thì giá thành quá cao chính vì thế việc gộp những message này thành một lô ( Batches ) làm bớt thiểu giá thành này. Vớ nhiên, đây là sự tấn công đổi giữa độ trễ với thông lượng ,cũng chỉ là 2 phương diện của một đồng xu thôi các lô càng to càng nhiều message sẽ bắt buộc đợi cho vừa khéo lô mới được gửi như thế độ trễ đã lớn. Các lô cũng hay được nén vì vậy cung ứng khả năng truyền và tàng trữ dữ liệu tác dụng hơn

Schemas

Mặc dù các thông điệp là những mảng byte ko có ý nghĩa sâu sắc vì thế bọn họ nên áp dụng kết cấu hoặc lược đồ gia dụng ( shemas ) cho ngôn từ message để có thể dễ đọc hơn. Có nhiều tùy chọn tất cả sẵn mang đến message schema, tùy thuộc vào ứng dụng của khách hàng cần gì. Các khối hệ thống đơn giản, chẳng hạn như (JSON) với (XML), rất dễ sử dụng và dễ đọc với nhỏ người. Tuy nhiên, chúng thiếu các tính năng như giải pháp xử lý kiểu mạnh khỏe và tài năng tương yêu thích giữa những phiên bản schemas. Các nhà phát triển Kafka cỗ vũ việc thực hiện Apache Avro, một framework tuần trường đoản cú hóa ban đầu được cải cách và phát triển cho Hadoop. Avro hỗ trợ một định hình tuần tự hóa nhỏ gọn, các Schemas tách bóc biệt với download trọng của message với không yêu cầu cần code lại khi chúng biến đổi .

Một format dữ liệu đồng hóa rất đặc trưng trong Kafka, bởi vì nó được cho phép viết và đọc các message bị bóc rời. Khi những tác vụ này được kết hợp chặt chẽ, các ứng dụng đăng ký để dấn message phải được update để cách xử trí định dạng tài liệu mới tuy nhiên song với format cũ. Sau đó, những ứng dụng đề nghị bắn những message bắt đầu được update để áp dụng định dạng mới. Bằng cách sử dụng các shemas được khẳng định rõ các message vào Kafka có thể được hiểu thuận lợi hơn. ( phù nếu như khó phát âm quá thì cứ nghĩ nó hệt như rpc gửi dữ liệu và bắt buộc file proto nhằm định dạng lại tài liệu khi nhận ý )

Topics and Partitions (chủ đề với phân vùng )

Message vào Kafka được phân nhiều loại thành các topics . Ví dụ sớm nhất với topic đó chính ra table trong db hay thư mục trong filesystem . Các topic được chia nhỏ tuổi ra thành các phân vùng nhỏ. Quay lại mô tả về commit log, một phân vùng được gọi là một bản ghi duy nhất của những message. Message được viết theo kiểu mục lục và được đọc theo thứ tự từ trên đầu đến cuối .Lưu ý rằng vị một topic thường có tương đối nhiều phân vùng , không tồn tại gì bảo đảm việc sắp tới xếp thời hạn của các message bên trên topic trong một phân vùng là duy nhất. Hình dưới cho thấy một topic có bốn phân vùng, cùng với việc các message đang rất được thêm vào thời gian cuối mỗi phân vùng. Từng phân vùng có thể được lưu trữ trên một sever khác nhau, điều đó tức là một topic có thể được scale theo chiều ngang bên trên nhiều máy chủ để hỗ trợ hiệu suất quá xa kỹ năng của một máy chủ duy nhất.


*

Stream là thuật ngữ thường được sử dụng khi nói tới dữ liệu vào các khối hệ thống như Kafka. Thông thường, một stream được xem là một single topic của dữ liệu, bất kể số lượng phân vùng trong topic. Điều này biểu đạt một stream tài liệu duy nhất gửi từ producers sang trọng consumers. Phương pháp đề cập đến các message này là khá thông dụng khi miêu tả việc xử lý củastream, chính là khi một trong những framework như Kafka Streams, Apache Samza với Storm, hoạt động trên các message theo thời hạn thực. Phương pháp hoạt đụng này rất có thể được so sánh với cách các framework ngoại tuyến, cụ thể là Hadoop, được thiết kế để hoạt động trên những dữ liệu đã đc xử lý dứt ( ko bắt buộc real time như những những trên ).

Producers and Consumers

Kafka client là những người dùng khối hệ thống Kafka và gồm 2 nhiều loại cơ bản : producers cùng consumers . Hình như còn có những advandced client APIs- Kafka Connect API để tích hợp những dữ liệu cùng Kafka Streams cho câu hỏi stream processing.

Producers là thành phần tạo ra các message. Trong khối hệ thống pub/sub có thể đc hotline là publishers xuất xắc writers .Nói phổ biến là nó sẽ tạo message và cung ứng cho một topic cụ thể. Theo khoác định, producers không ân cần việc message được bỏ vô phân vùng làm sao của topic. Trong một vài trường hợp, producer đã gửi message đến các phân vùng cụ thể. Điều này thường được thực hiện bằng phương pháp sử dụng key với trình phân vùng sẽ tạo ra một hàm băm của khóa với ánh xạ nó cho tới một phân vùng ví dụ . Điều này đảm bảo an toàn rằng toàn bộ các message được tạo bởi một khóa vẫn cho sẽ tiến hành ghi vào và một phân vùng duy nhất.

Consumers là yếu tắc đọc các message. Trong các hệ thống pub/sub khác, consumers hoàn toàn có thể gọi là subscribers hay những reader. Consumers đk một hoặc các topic cùng đọc các message theo trang bị tự mà bọn chúng được sinh sản ra. Consumers giữ vấn đề theo dõi hầu như message nhưng mà nó đã đăng kí bằng cách theo dõi các offset (là giá trị số nguyên tăng thêm mỗi lúc message đc tạo ra) . Từng message trong một phân vùng đều có số này là duy nhất. Việc thực hiện giá trị offset này giúp consumers hoàn toàn có thể dừng xuất xắc khi khởi rượu cồn lại hoàn toàn có thể đọc tiếp các message mà vẫn tồn tại vị trí đang đọc được trước đó. Hình như các consumers sẽ chuyển động như một group .Theo giải pháp này, consumer hoàn toàn có thể mở rộng theo chiều ngang để xử trí hết các topic với số lượng lớn những message. Bên cạnh ra, nếu như một consumer dứt hoạt động, những thành viên còn lại của nhóm sẽ thăng bằng lại các phân vùng đang được sử dụng và tiếp quản câu hỏi của thành viên bị hoàn thành hoạt động .


Brokers and Clusters

Một máy chủ Kafka được gọi là broker. Broker nhận được message từ producers , gán offsets cho cái đó và lưu trữ chúng trên ổ đĩa. Nó cũng ship hàng các comsumer, thỏa mãn nhu cầu yêu ước tìm phân vùng và trả lại các message đã đc commit trong ổ đĩa. Tuỳ vào phần cứng cụ thể và các điểm sáng về hiệu xuất của nó mà một broker hoàn toàn có thể xử lý hàng vạn phân vùng cùng hàng triệu message từng giây .

Xem thêm: Net Sales Là Gì - Các Loại Chi Phí Ảnh Hưởng Đến Net Sales

Kafka brokers được thiết kế với để vận động như một phần của một cluster. Vào một cụm những broker sẽ sở hữu được một broker chuyển động như cluster controller ( nó được bầu tự động từ những thành viên trong cluster đó). Controller chịu trách nhiệm cho các vận động quản trị, bao hàm việc gán những phân vùng cho những broker và thống kê giám sát các lỗi của chúng. Một phân vùng mà được sở hữu bởi vì một broker tốt nhất trong cluster thì broker đó được gọi là leader của phân vùng đó. Một phân vùng rất có thể được gán cho những broker, điều đó sẽ dẫn mang lại phân vùng có thể được xào nấu . Điều này cho phép một broker khác đổi thay leader ví như broker leader lúc này sập.


Tính năng chủ yếu của Apache Kafka là tài năng lưu giữ message vào một khoảng thời gian dài. Các broker được cấu hình mặc định để cất giữ message vào topic một khoảng thời gian (ví dụ: 7 ngày) hoặc cho đến khi topic đạt đến form size nhất định tính bằng bytes (ví dụ: 1 GB). Lúc đạt đến những giới hạn này, những message vẫn hết hạn và bị xóa nhằm lưu giữ các message mới. Các topic trơ khấc cũng có thể được thông số kỹ thuật việc giữ giữ riêng biệt để những message sẽ tiến hành lưu trữ miễn là bọn chúng còn hữu ích. Ví dụ: một message theo dõi có thể được bảo quản trong vài ba ngày, vào khi những message ít đặc biệt hơn có khả năng sẽ bị xóa và thay thế chỉ vào vài giờ.

Multiple Clusters

Khi Kafka phát triển, hay sẽ hiệu quả hơn nếu có khá nhiều Cluster. Họ có một vài nguyên nhân để hiểu tại sao điều này lại công dụng :

Phân chia những loại dữ liệuTách ra do các yêu ước về bảo mậtNhiều datacenter hơn (khắc phục vấn đề bị 1 lỗi khiến cho cả hệ thống sụp đổ)

Khi thao tác làm việc với các datacenter nói riêng, thường thì các message yêu cầu được tạo ra các bản sao giữa chúng. Ví dụ: nếu người dùng chuyển đổi thông tin công khai minh bạch trong hồ sơ của họ, chuyển đổi đó sẽ cần được update trên bất kì datacenter nào .Tuy nhiên những cơ chế xào nấu trong những cluster Kafka được thiết kế với để hoạt động trong một cluster duy nhất, không phải giữa những cluster.

Kafka tất cả một tool là MirrorMaker, được sử dụng cho mục tiêu này. Về cốt lõi, MirrorMaker chỉ đơn giản và dễ dàng là một Kafka consumer và producer được liên kết với nhau bằng 1 hàng hóng ( queue ) để message xuất phát điểm từ 1 cluster này được hỗ trợ cho một cluster khác. Hình dưới cho thấy một lấy ví dụ về kiến trúc sử dụng MirrorMaker, tổng hợp những message từ hai local clusters thành một các tổng hợp, sau đó sao chép cụm đó sang những datacenter khác.


Why Kafka

Có những lựa lựa chọn để tạo hệ thống publish/subscribe messaging systems , vậy điều gì khiến cho Apache Kafka là một trong những lựa lựa chọn tốt?

Multiple Producers

Kafka hoàn toàn có thể xử lý liền mạch các producers, cho dù clients đó đang áp dụng nhiều topic hoặc và một topic. Điều này làm cho một hệ thống lý tưởng nhằm tổng vừa lòng dữ liệu từ không ít frontend. Ví dụ: một trang web cung cấp nội dung cho tất cả những người dùng trải qua nhiều microservice như thế nghĩa là sẽ có nhiều producers bắn dữ liệu tích lũy từ các hoạt động của ng dùng vì thế sẽ có tương đối nhiều topic như vậy sẽ nhiều những định dạng ,tuy nhiên Kafka hoàn toàn có thể giải quyết toàn bộ các service và hoàn toàn có thể ghi và áp dụng một định dạng thông thường cho vớ cả. Consumer application có thể nhận một luồng tài liệu mà không cần phải nhận từ khá nhiều topic .

Multiple Consumers

Ngoài việc rất có thể thêm những producers, Kafka còn có phong cách thiết kế cho các consumers để đọc ngẫu nhiên (steam of message) loại tin nhắn nào nhưng không tác động lẫn nhau. Điều này còn có vẻ trái ngược vs queuing systeam nghĩa là trong hàng ngóng đó lúc 1 tin nhắn được sử dụng bởi một consumer, thì nó không khả dụng với phần lớn consumer khác. Multiple Kafka consumers có thể chọn hoạt động như 1 phần của nhóm và chia sẻ một stream, đảm bảo an toàn rằng toàn cục nhóm xử trí message đã cho chỉ trong một lần.

Disk-Based Retention (Duy trì dựa trên đĩa)

Kafka không chỉ có thể xử lý multiple consumers, hơn nữa có có thể lưu duy trì tin nhắn hơi lâu ( bảo trì bền ) bởi consumer không hẳn lúc nào thì cũng cần thao tác theo thời gian thực. Messages được commit vào ổ đĩa, và sẽ tiến hành lưu trữ với các quy tắc nhất định. Các tùy chọn này hoàn toàn có thể là được lựa chọn trên cơ sở từng topic, được cho phép các luồng message khác biệt có sự khác biệt về số lượng gia hạn phụ nằm trong vào nhu cầu của consumer. Duy trì bền có nghĩa là nếu consumer tụt lại phía sau, bởi vì xử lý lừ đừ hoặc bị rối loạn trong những khi truyền cũng không có nguy cơ bị mất dữ liệu. Nó cũng có thể có nghĩa là bảo trì có thể được thực hiện trên consumer, lấy các ứng dụng ngoại tuyến trong một khoảng thời gian ngắn, không niềm nở về những message sao lưu lại trên producer hoặc bị mất. Consumer có thể bị tạm dừng và những message sẽ tiến hành giữ lại sinh hoạt Kafka. Điều này chất nhận được nó khởi động lại cùng nhận những tin nhắn xử trí nơi bọn chúng thoát nhưng không mất dữ liệu.

Scalable

Khả năng mở rộng linh hoạt của Kafka sẽ giúp đỡ bạn tiện lợi xử lý ngẫu nhiên lượng tài liệu nào. Người tiêu dùng có thể bước đầu với một broker độc nhất như một proof of concept, không ngừng mở rộng từ một phát triển từ một cluster nhỏ dại gồm 3 brokers rồi chuyển sang cùng với một mô hình to hơn với một cluster bự với hàng nghìn ngàn broker trở nên tân tiến theo thời gian khi dữ liệu tăng lên. Scale hoàn toàn có thể được thực hiện bên trong khi cluster đã online cơ mà không tác động đến tính khả dụng của toàn thể hệ thống. Điều này cũng có nghĩa là một nhóm những broker có thể xử lý sự thất bại của một broker trơ trọi và tiếp tục phục vụ khách hàng. Những cluster gặp gỡ nhiều đại bại hơn rất có thể được thông số kỹ thuật với những yếu tố coppy cao hơn.

High Performance

Tất cả những tính năng này kết phù hợp với nhau để trở thành Apache Kafka thành một khối hệ thống publish/subscribe messaging cùng với hiệu suất hoàn hảo và tuyệt vời nhất dưới sở hữu trọng cao. Producers, consumers với brokers đều hoàn toàn có thể mở rộng lớn quy mô nhằm xử lý các luồng message rất lớn một cách dễ dàng.

The Data Ecosystem (hệ sinh thái dữ liệu)

Apache Kafka cung cấp hệ thống thống kê giám sát cho hệ sinh thái data . Nó sẽ mang message giữa các thành phần khác nhau của đại lý hạ tầng, hỗ trợ một giao diện đồng hóa cho tất cả client. Lúc được kết phù hợp với một khối hệ thống để hỗ trợ các message, producers cùng consumers không hề yêu ước kết nối ngặt nghèo hoặc kết nối trực tiếp dưới bất kỳ hình thức nào. Những thành phần có thể được thêm với xóa khi gặp mặt các trường hợp khác biệt ,và các producers không cần phải để ý đến việc nhiều người đang sử dụng tài liệu hoặc số lượng ứng dụng mang dữ liệu.

Use Cases

Activity tracking

Messaging

Kafka cũng được sử dụng để nhắn tin, nơi những ứng dụng buộc phải gửi thông tin (như email) cho người dùng. Những áp dụng đó có thể tạo tin nhắn mà không nên phải suy xét định dạng hoặc phương pháp tin nhắn sẽ thực sự được gửi. Sau đó, một ứng dụng có thể đọc tất cả các tin nhắn được gởi và giải pháp xử lý chúng một biện pháp nhất quán, bao gồm:

Định dạng các messageThu thập những message vào một trong những rồi mới được gửiÁp dụng tùy lựa chọn của người dùng về cách người ta muốn nhận tin nhắn

Sử dụng một vận dụng duy tốt nhất cho vấn đề này để tránh sự cần thiết phải sao chép công dụng trong các ứng dụng, cũng như chất nhận được các chuyển động như tổng hợp nhưng mà không thể tiến hành được.

Metrics & logging

Kafka cũng lý tưởng để tích lũy các dữ liệu và logging. Đây là một tác dụng trong trường đúng theo là có khả năng nhiều ứng dụng tạo thành cùng các loại message. Các ứng dụng public dữ liệu tiếp tục cho topic Kafka và những dữ liệu này rất có thể được sử dụng bởi các hệ thống để theo dõi và cảnh báo. Chúng ta cũng có thể được thực hiện trong một hệ thống ngoại con đường như Hadoop để triển khai phân tích lâu năm hơn, ví dụ như dự báo tăng trưởng. Message hoàn toàn có thể được public theo cùng một cách, và rất có thể được được chuyển mang đến các hệ thống tìm tìm logging chuyên sử dụng như Elastisearch hoặc vận dụng phân tích bảo mật.

Commit log

Vì Kafka dựa vào khái niệm commit log, các biến đổi cơ sở dữ liệu hoàn toàn có thể được public lên Kafka và các ứng dụng có thể dễ dàng quan sát và theo dõi luồng này để nhận cập nhật trực tiếp khi chúng xuất hiện. Luồng chuyển đổi này cũng có thể được áp dụng để xào luộc các cập nhật cơ sở tài liệu vào một hệ thống từ xa hoặc nhằm hợp độc nhất các đổi khác từ nhiều vận dụng vào một chế độ xem . Duy trì lâu dài vô cùng hữu ích ở đây để cung ứng bộ đệm cho nuốm đổi, có nghĩa là nó có thể được phát lại trong trường hợp áp dụng lấy tài liệu bị lỗi. Luân phiên, các topic được nén có thể được sử dụng để cung cấp khả năng bảo quản lâu hơn

Oaaa giới thiệu có vẻ lâu năm và bài toán đọc bao gồm thể nâng cao giấc ngủ . Cơ mà yên trung khu ngay sau đấy là phần hướng dẫn thiết đặt sẽ tất cả trong bài viết dưới trên đây :