2015-09-24 20 views
7

Tôi đang sử dụng kafka để truyền các sự kiện truy cập trang của người dùng trang web đến dịch vụ phân tích. Mỗi sự kiện sẽ bao gồm các chi tiết sau đây cho người tiêu dùng:Có thể tạo chủ đề kafka với số phân vùng động không?

  • user id
  • địa chỉ
  • IP của người dùng

tôi cần thông rất cao, vì vậy tôi đã quyết định để phân vùng các chủ đề với chìa khóa phân vùng như userId-ipAddress tức

Đối với một userId 1000 và ip địa chỉ 10.0.0.1, sự kiện này sẽ có chìa khóa phân vùng là "1000-10.0.0.1"

Trong trường hợp sử dụng này, khóa phân vùng là động, vì vậy chỉ định số lượng phân vùng trả trước trong khi tạo chủ đề. Có thể tạo chủ đề trong kafka với số phân vùng động không?

Thực tiễn tốt là sử dụng loại phân vùng này hoặc có cách nào khác có thể đạt được không?

Trả lời

10

Không thể tạo chủ đề Kafka với số phân vùng động. Khi bạn tạo một chủ đề, bạn phải xác định số lượng phân vùng. Bạn có thể thay đổi nó sau này theo cách thủ công bằng cách sử dụng Replication Tools.

Nhưng tôi không hiểu tại sao bạn cần đếm phân vùng động ở vị trí đầu tiên. Khóa phân vùng không liên quan đến số lượng phân vùng. Bạn có thể sử dụng khóa phân vùng của bạn với mười phân vùng hoặc với hàng nghìn phân vùng. Khi bạn gửi một tin nhắn đến chủ đề Kafka, Kafka phải gửi nó đến một phân vùng cụ thể. Mỗi phân vùng được xác định bởi ID của nó mà chỉ đơn giản là một số. Kafka tính toán một cái gì đó như thế này

partition_id = hash(partition_key) % number_of_partition 

và nó sẽ gửi thư đến phân vùng partition_id. Nếu bạn có nhiều người dùng hơn phân vùng, bạn nên OK. Các đề xuất khác:

  • Sử dụng userId làm khóa phân vùng. Có thể bạn không cần địa chỉ IP như một phần của khóa phân vùng. Nó tốt cho cái gì? Thông thường, bạn cần tất cả các tin nhắn từ một người dùng duy nhất để kết thúc trong một phân vùng duy nhất. Nếu bạn có địa chỉ IP làm khóa phân vùng thì các tin nhắn từ một người dùng có thể kết thúc trong nhiều phân vùng. Tôi không biết trường hợp sử dụng của bạn nhưng nó nói chung đó không phải là những gì bạn muốn.
  • Đo lường số lượng phân vùng bạn cần để xử lý tất cả thư. Sau đó, hãy tạo phân vùng nhiều hơn gấp mười lần. Bạn có thể tạo nhiều phân vùng hơn bạn thực sự cần. Kafka sẽ không quan tâm và không có hình phạt về hiệu suất. Xem How to choose the number of topics/partitions in a Kafka cluster?

Ngay bây giờ, bạn sẽ có thể xử lý tất cả thư trong hệ thống của mình. Nếu lưu lượng truy cập tăng lên, bạn có thể thêm nhiều nhà môi giới Kafka và bạn có thể sử dụng công cụ Nhân bản để thay đổi các nhà lãnh đạo/bản sao cho các phân vùng. Nếu lưu lượng truy cập tăng hơn mười lần, bạn phải tạo phân vùng mới.

Các vấn đề liên quan