2017-03-24 20 views
11

Để chạy Kafka, bạn cần đặt một số thuộc tính trong tệp config/server.properties. Có hai cài đặt tôi không hiểu.Cấu hình máy chủ Kafka - người nghe vs advertised.listeners

Ai đó có thể giải thích sự khác biệt giữa người nghe và tài sản advertised.listeners?

Các tài liệu nói:

nghe: Các địa chỉ máy chủ socket lắng nghe trên.

advertised.listeners: Hostname và cổng nhà môi giới sẽ quảng cáo cho nhà sản xuất và người tiêu dùng.

Khi nào tôi phải sử dụng cài đặt nào?

Trả lời

14

Vì tôi không thể nhận xét nhưng tôi sẽ đăng bài này dưới dạng "câu trả lời", thêm vào câu trả lời của M.Situations.

Trong cùng một tài liệu ông liên kết có lời giới thiệu này về mà nghe được sử dụng bởi một khách hàng Kafka (https://cwiki.apache.org/confluence/display/KAFKA/KIP-103%3A+Separation+of+Internal+and+External+traffic):

Như đã trình bày trước đây, khách hàng không bao giờ nhìn thấy tên người nghe và sẽ đưa ra yêu cầu siêu dữ liệu chính xác như trước . Sự khác biệt là danh sách các thiết bị đầu cuối mà chúng lấy lại bị hạn chế đối với tên người nghe của điểm cuối nơi chúng thực hiện yêu cầu.

Điều này quan trọng tùy thuộc vào URL bạn sử dụng trong cấu hình bootstrap.servers sẽ là URL * mà máy khách sẽ lấy lại nếu nó được ánh xạ trong advertised.listeners (không biết hành vi là gì nếu người nghe không tồn tại).

Cũng lưu ý này:

Trường hợp ngoại lệ là người tiêu dùng Zookeeper-based. Những người tiêu dùng này lấy thông tin đăng ký môi giới trực tiếp từ ZooKeeper và sẽ chọn người nghe đầu tiên với PLAINTEXT làm giao thức bảo mật (giao thức bảo mật duy nhất mà họ hỗ trợ).

Là một cấu hình ví dụ môi giới (cho tất cả các nhà môi giới trong cluster):

advertised.listeners = EXTERNAL: //XXXXX.compute-1.amazonaws.com: 9990, NỘI: // ip -XXXXX.ec2.internal: 9993

inter.broker.listener.name = NỘI

listener.security.protocol.map = EXTERNAL: SSL, NỘI BỘ: plaintext

Nếu khách hàng sử dụng XXXXX.compute-1.amazonaws.com:9990 để kết nối, tìm nạp siêu dữ liệu sẽ chuyển đến nhà môi giới đó. Tuy nhiên, URL trả về để sử dụng với Điều phối viên nhóm có thể là 123.compute-1.amazonaws.com:9990* (một máy khác!). Điều này có nghĩa là khớp được thực hiện trên tên người nghe như được quảng cáo bởi KIP-103 bất kể URL thực tế (nút).

Vì bản đồ giao thức cho EXTERNAL là SSL, điều này sẽ buộc bạn phải sử dụng kho khóa SSL để kết nối.

Nếu mặt khác bạn đang ở trong AWS, giả sử bạn có thể phát hành ip-XXXXX.ec2.nội bộ: 9993 và kết nối tương ứng sẽ là bản rõ dựa trên bản đồ giao thức. Điều này đặc biệt cần thiết trong IaaS, nơi người môi giới và người tiêu dùng của tôi sống trên AWS, trong khi nhà sản xuất của tôi sống trên một trang web khách hàng, do đó cần các giao thức bảo mật và người nghe khác nhau.

CHỈNH SỬA: Đồng thời, thêm Quy tắc gửi đến giờ đây dễ dàng hơn nhiều khi bạn có các cổng khác nhau cho các khách hàng khác nhau (nhà môi giới, nhà sản xuất, người tiêu dùng).

+0

Tôi không chắc chắn bạn có thể gán bí danh cho cả hai 'listeners' và' advertised.listeners', ít nhất với tôi trên HDP 2.5.0.3 nó không hoạt động, có lẽ đã bỏ sót điều gì đó. Điều gì làm việc cho tôi là xác định các nhóm cấu hình khác nhau và đặt quảng cáo cụ thể trên các địa chỉ IP cần thiết. Cảm ơn, – reim

8

listeners là những gì nhà môi giới sẽ sử dụng để tạo ổ cắm máy chủ.

advertised.listeners là những gì khách hàng sẽ sử dụng để kết nối với nhà môi giới.

Hai cài đặt có thể khác nhau nếu bạn có thiết lập mạng "phức tạp" (với những thứ như mạng phụ công cộng và riêng tư và định tuyến ở giữa).

1

Từ liên kết này: https://cwiki.apache.org/confluence/display/KAFKA/KIP-103%3A+Separation+of+Internal+and+External+traffic

Trong chu kỳ 0.9.0.0 phát hành, hỗ trợ cho nhiều người nghe mỗi môi giới đã được giới thiệu. Mỗi người nghe được liên kết với giao thức bảo mật , ip/máy chủ và cổng. Khi được kết hợp với cơ chế người nghe được quảng cáo, có một mức độ linh hoạt hợp lý với một giới hạn : tối đa một người nghe cho mỗi giao thức bảo mật trong mỗi số hai cấu hình (người nghe và advertised.listeners).

Trong một số môi trường, người dùng có thể muốn phân biệt giữa khách hàng bên ngoài, khách hàng nội bộ và lưu lượng nhân rộng độc lập với giao thức bảo mật vì lý do chi phí, hiệu suất và bảo mật. Một vài ví dụ: ví dụ minh họa điều này:

  • Giao thông nhân rộng được gán cho một giao diện mạng riêng biệt để nó không can thiệp vào lưu lượng khách hàng.
  • Lưu lượng truy cập bên ngoài thông qua proxy/cân bằng tải (bảo mật, linh hoạt) trong khi lưu lượng truy cập nội bộ chạm trực tiếp vào công ty môi giới (hiệu suất, chi phí).
  • thiết lập bảo mật khác nhau cho bên ngoài so với giao thông nội bộ mặc dù giao thức bảo mật là như nhau (ví dụ như thiết lập khác nhau của kích hoạt cơ chế SASL, máy chủ xác thực, keystores khác nhau, , vv)

Như vậy, chúng tôi đề xuất rằng các nhà môi giới Kafka có thể xác định được nhiều người nghe cho cùng một giao thức bảo mật để ràng buộc (tức là người nghe) và chia sẻ (tức là được quảng cáo.người nghe) để nội bộ, lưu lượng truy cập bên ngoài và sao chép có thể được tách riêng nếu được yêu cầu.

Vì vậy,

thính giả - danh sách bằng dấu phẩy tách ra của URI chúng tôi sẽ lắng nghe trên và các giao thức của họ. Chỉ định tên máy chủ là 0.0.0.0 để liên kết với tất cả các giao diện. Để trống tên máy chủ để liên kết với giao diện mặc định. Ví dụ về danh sách người nghe pháp lý: PLAINTEXT://myhost:9092,TRACE://:9091 PLAINTEXT://0.0.0.0:9092, TRACE://localhost:9093

advertised.listeners - Nghe để xuất bản lên ZooKeeper cho khách hàng sử dụng, nếu khác với người nghe ở trên. Trong môi trường IaaS, điều này có thể cần phải khác với giao diện mà người môi giới liên kết. Nếu không được đặt, giá trị cho listeners sẽ được sử dụng.

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