Có phải Zookeeper là phải cho Kafka?


134

Trong Kafka, tôi chỉ muốn sử dụng một nhà môi giới duy nhất, một chủ đề duy nhất và một phân vùng duy nhất có một nhà sản xuất và nhiều người tiêu dùng (mỗi người tiêu dùng nhận được bản sao dữ liệu của riêng họ từ nhà môi giới). Vì điều này, tôi không muốn sử dụng Zookeeper; Tôi có thể không chỉ sử dụng các nhà môi giới mà thôi? Tại sao một Zookeeper phải?


12
Một trong những mục tiêu thiết kế lớn nhất của Kafka là triển khai cụm. Đó là vấn đề họ đang giải quyết, và sẽ thật ngớ ngẩn khi tạo một phiên bản không có zk cho một máy chủ độc lập. Tôi có cảm giác rằng kafka không phải là công cụ cho công việc của bạn, nhưng bạn sẽ tốt hơn nếu chỉ sử dụng một tệp vanilla ..
RickyA

5
Tôi thực sự muốn biết những gì bạn đã hoàn thành? Vì bạn không chọn bất kỳ câu trả lời nào, tôi cho rằng bạn có giải pháp của riêng mình cho việc này. Cảm ơn !
Karthikeyan

Jocko là một triển khai golang của Kafka mà không cần phụ thuộc vào người quản lý vườn thú & cài đặt nhị phân duy nhất
Arun Gopalpuri

1
Zookeeper đã bị xóa, xem câu trả lời bên dưới - stackoverflow.com/a/57328140/1699956
Mangat Rai Modi

1
chỉ cần thêm, nếu bạn đọc những gì người quản lý vườn thú làm, bạn sẽ có ý tưởng -Zookeeper is network coordinator in a distributed system. Use ZooKeeper extensively for discovery, resource allocation, leader election, and high priority notifications.
roottraveller

Câu trả lời:


128

Có, Zookeeper là cần thiết để chạy Kafka. Từ tài liệu Bắt đầu của Kafka:

Bước 2: Khởi động máy chủ

Kafka sử dụng người quản lý vườn thú, vì vậy trước tiên bạn cần khởi động máy chủ vườn thú nếu bạn chưa có. Bạn có thể sử dụng tập lệnh tiện lợi được đóng gói với kafka để có được một cá thể người quản lý một nút nhanh và bẩn.

Về lý do, mọi người từ lâu đã phát hiện ra rằng bạn cần có một số cách để phối hợp các nhiệm vụ, quản lý nhà nước, cấu hình, vv trên một hệ thống phân tán. Một số dự án đã xây dựng các cơ chế riêng của chúng (nghĩ về máy chủ cấu hình trong cụm phân đoạn MongoDB hoặc nút Master trong cụm Elaticsearch). Những người khác đã chọn tận dụng Zookeeper như một hệ thống phối hợp quy trình phân phối mục đích chung. Vì vậy, Kafka, Storm, HBase, SolrCloud chỉ cần đặt tên cho một vài người sử dụng Zookeeper để giúp quản lý và điều phối.

Kafka là một hệ thống phân tán và được xây dựng để sử dụng Zookeeper. Việc bạn không sử dụng bất kỳ tính năng phân tán nào của Kafka sẽ không thay đổi cách nó được xây dựng. Trong mọi trường hợp, không nên có quá nhiều chi phí từ việc sử dụng Zookeeper. Một câu hỏi lớn hơn là tại sao bạn sẽ sử dụng mẫu thiết kế đặc biệt này - một triển khai môi giới duy nhất của Kafka bỏ lỡ tất cả các tính năng đáng tin cậy của cụm đa môi giới cùng với khả năng mở rộng quy mô.


9
Trên thực tế, kafka được thiết kế theo cách mà ngay cả khi bạn đi với một nhà môi giới duy nhất, nó vẫn là chế độ phân tán, nhưng với hệ số sao chép là 1 - sẽ không có cơ chế phím tắt hoặc chế độ đặc biệt (thực tế là tốt).
om-nom-nom

2
Kafka 0.8.1 yêu cầu zk. Và tôi tự hỏi, nếu không có lớp trừu tượng trong Kafka để hoạt động với hệ thống phối hợp, làm thế nào hệ thống phối hợp khác có thể được kích hoạt cho Kafka.
stanleyxu2005

Cập nhật quan trọng stackoverflow.com/a/57328140
43238570

64

Theo giải thích của những người khác, Kafka (ngay cả trong phiên bản gần đây nhất) sẽ không hoạt động nếu không có Zookeeper.

Kafka sử dụng Zookeeper cho các mục sau:

Bầu một bộ điều khiển . Bộ điều khiển là một trong những nhà môi giới và chịu trách nhiệm duy trì mối quan hệ lãnh đạo / người theo dõi cho tất cả các phân vùng. Khi một nút tắt, bộ điều khiển sẽ báo cho các bản sao khác trở thành các nhà lãnh đạo phân vùng để thay thế các nhà lãnh đạo phân vùng trên nút sắp biến mất. Zookeeper được sử dụng để bầu một bộ điều khiển, đảm bảo chỉ có một và chọn một bộ điều khiển mới nếu nó gặp sự cố.

Thành viên của cụm - nhà môi giới nào còn sống và là một phần của cụm? điều này cũng được quản lý thông qua ZooKeeper.

Cấu hình chủ đề - chủ đề nào tồn tại, mỗi phân vùng có bao nhiêu phân vùng, bản sao ở đâu, ai là người lãnh đạo ưa thích, ghi đè cấu hình nào được đặt cho mỗi chủ đề

(0.9.0) - Hạn ngạch - mỗi khách hàng được phép đọc và ghi bao nhiêu dữ liệu

(0.9.0) - ACL - người được phép đọc và viết cho chủ đề nào (người tiêu dùng cấp cao cũ) - Nhóm người tiêu dùng nào tồn tại, ai là thành viên của họ và mức bù trừ mới nhất mà mỗi nhóm nhận được từ mỗi phân vùng.

[từ https://www.quora.com/What-is-the-actual-role-of-ZooKeeper-in-Kafkaitical/Gwen-Shapira ]

Về kịch bản của bạn, chỉ có một phiên bản môi giới và một nhà sản xuất có nhiều người tiêu dùng, bạn có thể sử dụng trình tạo để tạo kênh và đẩy sự kiện đến kênh mà người tiêu dùng có thể đăng ký và trao các sự kiện đó. https://pizer.com/


3
Bạn có muốn chỉnh sửa "phiên bản mới nhất" thành phiên bản thực tế. Làm cho tuổi trả lời của bạn tốt hơn.
akauppi

6
bạn đã sao chép các câu trả lời từ quora.com/What-is-the-actual-role-of-ZooKeeper-in-Kafka/answer/...
Junchen Liu

Tôi thêm tài liệu tham khảo, đoạn cuối có nguồn gốc từ tôi.
Kevin Li

47

Cập nhật quan trọng - Tháng 8 năm 2019:

Sự phụ thuộc ZooKeeper sẽ bị xóa khỏi Apache Kafka . Xem cuộc thảo luận cấp cao trong KIP-500 : Thay thế ZooKeeper bằng Đại biểu siêu dữ liệu tự quản lý .

Những nỗ lực này sẽ mất một vài bản phát hành Kafka và các KIP bổ sung. Bộ điều khiển Kafka sẽ đảm nhận các nhiệm vụ của nhiệm vụ ZooKeeper hiện tại. Bộ điều khiển sẽ tận dụng những lợi ích của Nhật ký sự kiện, một khái niệm cốt lõi của Kafka.

Một số lợi ích của kiến ​​trúc Kafka mới là kiến ​​trúc đơn giản hơn, dễ vận hành và khả năng mở rộng tốt hơn (ví dụ: cho phép "phân vùng không giới hạn".


17

Cập nhật vào tháng 7 năm 2020

Đối với phiên bản mới nhất (2.5.0) ZooKeeper vẫn được yêu cầu để chạy Kafka, nhưng trong tương lai gần ZooKeeper sẽ được thay thế bằng Đại biểu siêu dữ liệu tự quản lý .

Xem chi tiết trong KIP-500 được chấp nhận .


11

Kafka được xây dựng để sử dụng Zookeeper. Không có lối thoát từ đó.

Kafka là một hệ thống phân tán và sử dụng Zookeeper để theo dõi trạng thái của các nút cụm kafka. Nó cũng theo dõi các chủ đề, phân vùng Kafka, vv

Nhìn vào câu hỏi của bạn, có vẻ như bạn không cần Kafka. Bạn có thể sử dụng bất kỳ ứng dụng nào hỗ trợ pub-sub như Redis , Rabbit MQ hoặc các giải pháp được lưu trữ như Pub-nub .


9

IMHO Zookeeper không phải là một chi phí nhưng làm cho cuộc sống của bạn dễ dàng hơn rất nhiều.

Về cơ bản, nó được sử dụng để duy trì sự phối hợp giữa các nút khác nhau trong một cụm. Một trong những điều quan trọng nhất đối với Kafka là nó sử dụng người quản lý vườn thú để thực hiện các lần bù trừ định kỳ để trong trường hợp lỗi nút, nó có thể tiếp tục từ phần bù đã cam kết trước đó (hãy tưởng tượng bạn tự chăm sóc tất cả điều này).

Zookeeper cũng đóng một vai trò quan trọng để phục vụ nhiều mục đích khác, chẳng hạn như phát hiện người lãnh đạo, quản lý cấu hình, đồng bộ hóa, phát hiện khi một nút mới tham gia hoặc rời khỏi cụm, v.v.

Các bản phát hành Kafka trong tương lai đang có kế hoạch loại bỏ sự phụ thuộc của người quản lý vườn thú nhưng cho đến nay nó là một phần không thể thiếu của nó.

Dưới đây là một vài dòng được lấy từ trang Câu hỏi thường gặp của họ:

Khi đại biểu Zookeeper ngừng hoạt động, các nhà môi giới có thể dẫn đến trạng thái xấu và thường không thể phục vụ các yêu cầu của khách hàng, v.v. Mặc dù khi Zookeeper quorum phục hồi, các nhà môi giới Kafka có thể tự động trở lại trạng thái bình thường, vẫn còn một vài trường hợp góc họ không thể và cần phải giết và hồi phục mạnh để đưa nó trở lại bình thường. Do đó, nên theo dõi chặt chẽ cụm người quản lý vườn thú của bạn và cung cấp nó để nó hoạt động.

Để biết thêm chi tiết kiểm tra ở đây


13
Zookeeper là một cơn đau đầu lớn. Trong HBase. Ở Kafka. Trong cơn bão. Có những lỗi từ lâu mà tôi biết ở Kafka / ZK đã khiến nhóm của tôi từ bỏ nó để ủng hộ RabbitMQ. Cài đặt HBase liên quan đến thời gian để xử lý các vấn đề ZK. Tuy nhiên, câu trả lời của bạn liên quan đến OP IS chính xác: ZK là bắt buộc.
javadba

2
Đúng là có vấn đề tương thích với phiên bản và lỗi (ít nhất là với Kafka và ZK) nhưng mục đích chính của người quản lý vườn thú là quản lý các nhiệm vụ phức tạp cần thiết cho bất kỳ hệ thống phân tán nào. Tôi đồng ý rằng việc quản lý và điều chỉnh cụm zk của bạn đòi hỏi một số nỗ lực và phụ thuộc rất nhiều trên zk có thể không phải là một cuộc gọi khôn ngoan. Có lẽ đó là lý do tại sao kafka đang cố gắng giảm sự phụ thuộc zk trong các phiên bản sau. Ở một khía cạnh khác, tôi tin rằng RabitMQ và Kafka có những triết lý thiết kế rất khác nhau và nhằm giải quyết các trường hợp sử dụng khác nhau nhưng tôi nghĩ là vượt quá phạm vi của cuộc thảo luận này :)
user2720864

Có, kafka là vượt trội cho các kịch bản tải cao. Chúng tôi quyết định làm RabbitMQ cho đến khi / trừ khi chúng tôi yêu cầu rõ ràng những lợi thế đó. Lập trình trong RabbitMQ cũng dễ dàng hơn: có những phụ thuộc phiên bản scala khó khăn cho Kafka.
javadba

4
IMHO zookeeper is not an overhead but makes your life a lot easier.-> không phải từ quan điểm của một sysop. Zk là một phần của hành trình java cũ lạc hậu. Ví dụ, nó có một lỗi tồn tại lâu ở chỗ nó không tuân thủ ttl của một mục dns nên nó sẽ không giải quyết lại một mục. Ra khỏi cửa sổ đi khả năng trao đổi máy chủ của bạn. Tôi sẽ trao đổi nó một cách hạnh phúc cho vv.
RickyA 11/03/2016

"Chúng tôi quyết định làm RabbitMQ cho đến khi / trừ khi chúng tôi yêu cầu rõ ràng những lợi thế đó". Chúc đội của tôi được giác ngộ như thế này. IMHO, rõ ràng chúng tôi không có tải đủ cao để biện minh cho Kafka, nhưng dù sao chúng tôi cũng đang sử dụng Kafka :(
Mr Smith

4

Zookeeper là hệ thống quản lý và tập trung cho bất kỳ loại hệ thống phân tán nào. Hệ thống phân tán là các mô-đun phần mềm khác nhau chạy trên các nút / cụm khác nhau (có thể ở các vị trí xa về mặt địa lý) nhưng chạy như một hệ thống. Zookeeper tạo điều kiện giao tiếp giữa các nút, chia sẻ cấu hình giữa các nút, nó theo dõi nút nào là người lãnh đạo, nút nào tham gia / rời khỏi, v.v. Zookeeper là người giữ cho hệ thống phân tán lành mạnh và duy trì tính nhất quán. Zookeeper về cơ bản là một nền tảng điều phối.

Kafka là một hệ thống phân tán . Và do đó, nó cần một số kiểu phối hợp cho các nút có thể ở xa về mặt địa lý (hoặc không).


3

Vâng, Zookeeper phải được thiết kế cho Kafka. Bởi vì Zookeeper có trách nhiệm một loại quản lý cụm Kafka. Nó có danh sách tất cả các nhà môi giới Kafka với nó. Nó thông báo cho Kafka, nếu bất kỳ nhà môi giới nào đi xuống, hoặc phân vùng bị hỏng hoặc nhà môi giới mới lên hoặc phân vùng tăng. Tóm lại, ZK giữ cho mọi nhà môi giới Kafka được cập nhật về trạng thái hiện tại của cụm Kafka.

Sau đó, mọi khách hàng Kafka (nhà sản xuất / người tiêu dùng) cần làm là kết nối với bất kỳ nhà môi giới nào và nhà môi giới đó có tất cả siêu dữ liệu được cập nhật bởi Zookeeper, vì vậy khách hàng không cần phải bận tâm về vấn đề đau đầu khám phá của nhà môi giới.


3

Khác với chuyển tin nhắn tải trọng thông thường, có nhiều giao tiếp khác xảy ra trong kafka, như

  • Các sự kiện liên quan đến môi giới yêu cầu thành viên cụm.
  • Các sự kiện liên quan đến Môi giới trở nên có sẵn.
  • Bắt cài đặt cấu hình bootstrap.
  • Các sự kiện liên quan đến cập nhật bộ điều khiển và lãnh đạo.
  • Trợ giúp cập nhật trạng thái như cập nhật Heartbeat.

Zookeeper chính nó là một hệ thống phân tán bao gồm nhiều nút trong một nhóm. Zookeeper là dịch vụ tập trung để duy trì siêu dữ liệu đó.


1

Bài viết này giải thích vai trò của Zookeeper trong Kafka. Nó giải thích cách kafka không quốc tịch và cách mà zookeper đóng vai trò quan trọng trong bản chất phân tán của kafka (và nhiều hệ thống phân tán hơn).


1

Yêu cầu chạy Kafka mà không có Zookeeper dường như khá phổ biến. Thư viện Charlatan giải quyết điều này.

Theo mô tả là Charlatan ít nhiều là một kẻ nhạo báng cho Zookeeper, cung cấp các dịch vụ Zookeeper hoặc được hỗ trợ bởi các công cụ khác hoặc bởi một cơ sở dữ liệu.

Tôi bắt gặp thư viện đó khi giao dịch với sản phẩm chính của các tác giả cho thư viện Charlatan; ở đó nó hoạt động tốt


0

Thứ nhất

Apache ZooKeeper là một cửa hàng phân phối được sử dụng để cung cấp các dịch vụ cấu hìnhđồng bộ hóa theo cách sẵn có cao. Trong các phiên bản gần đây hơn của Kafka, công việc đã được thực hiện để khách hàng của khách hàng không lưu trữ thông tin về việc họ đã tiêu thụ bao xa (gọi là offset) vào ZooKeeper .This reduced usage did not get rid of the need for consensus and coordination in distributed systems however.Trong khi Kafka cung cấp khả năng chịu lỗi và khả năng phục hồi , thì cần phải cung cấp sự phối hợp cần thiết và ZooKeeper cho phép phần đó của toàn bộ hệ thống.

Thứ hai

Đồng ý về việc ai là người lãnh đạo phân vùng , là một ví dụ về ứng dụng thực tế của ZooKeeper trong hệ sinh thái Kafka.

Zookeeper would work if there was even a single broker. 

Đây là từ cuốn sách Kafka In Action . Hình ảnh là từ khóa học này

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.