2015-05-07 15 views
11

Tôi sẽ sử dụng kafka trong môi trường giao thông rất cao với hơn một tỷ yêu cầu mỗi ngày. Mọi yêu cầu sẽ tạo kết nối tới cụm kafka để gửi tin nhắn. Vì vậy, sẽ có rất nhiều kết nối được thực hiện liên tục mỗi giây. Điều này có thể gây ra các sự cố như hết thời gian chờ của ổ cắm. nhà sản xuất đang thực hiện tất cả các kết nối không liên tục. Vì vậy, trong trường hợp như vậy có thể có thời gian chờ ổ cắm hoặc các vấn đề cạn kiệt cổng.Quản lý kết nối khi sử dụng nhà sản xuất kafka trong môi trường giao thông cao

Hầu hết hệ sinh thái đều có trong php, vì vậy tôi phải sử dụng thư viện php cho kafka. Bây giờ làm thế nào để có hiệu quả sử dụng nhà sản xuất kafka để giảm thiểu tranh chấp kết nối này?

Tôi nghĩ về một quy trình daemon có thể được cung cấp tin nhắn và sau đó nó sẽ gửi các thông báo này theo lô tới cụm kafka. Ngoài ra, có thể có số lượng kết nối hạn chế. Down side là độ trễ đáp ứng của dịch vụ như vậy sẽ cản trở ứng dụng. Ngoài ra tôi phải sử dụng một số lưu trữ trung gian để giữ tin nhắn.

Bây giờ tôi biết rằng có rất nhiều ứng dụng/trang web có khối lượng cực cao sử dụng kafka để truyền trực tiếp thư. Có thể một trong các bạn hướng dẫn tôi về cách giải quyết những vấn đề này không? Các kết nối liên tục có thể trợ giúp trong trường hợp này không? Sử dụng thư viện php của nhà sản xuất kafka trong môi trường có khối lượng lớn như vậy có phải là một ý tưởng tồi không?

Trả lời

2

Chúng tôi cũng sử dụng thư viện java kafka và chúng tôi làm như @apatel nói, sẽ quản lý nhiều kết nối. Dưới đây là một số bài viết thú vị về ứng dụng sidecar của Netflix Netflix Prana

+0

cảm ơn đề xuất của bạn và liên kết. Tuy nhiên, tôi không thể kết nối hệ thống như prana có thể được sử dụng như nhà sản xuất kafka. Bạn có nghĩa là để nói rằng cách duy nhất để thực hiện kafka-sản xuất là để giữ cho nó chạy song song với ứng dụng chính và có nó xếp hàng các tin nhắn trong nền? Nếu vậy, sẽ tạo ra một quá trình daemon sẽ là tốt? – Shades88

+1

Prana là ví dụ duy nhất để giới thiệu bạn với mô hình sidecar. Trong trường hợp này, bạn nên phát triển riêng sidecar, ví dụ: một số ứng dụng java nhỏ với máy chủ http nhúng (ví dụ Undertow), ứng dụng sẽ kết nối với kafka khi khởi động và cung cấp api để gửi tin nhắn ví dụ:/messages/$ topic rồi ứng dụng php của bạn sẽ gửi tin nhắn đến/localhost/messages/$ topic –

+0

của khóa học sidecar nên được triển khai trên cùng một máy như ứng dụng php của bạn. –

2

Chúng tôi đang sử dụng thư viện java kafka và chúng tôi kết nối với kafka khi khởi động máy chủ. Hiện tại, chúng tôi đang gửi khoảng một nửa tỷ tin nhắn đến kafka mỗi ngày và không bao giờ có bất kỳ vấn đề nào với nó.

Khi bạn tạo nhà sản xuất, về cơ bản nó tạo nhiều kết nối ... một cho mỗi phân vùng. Vì vậy, miễn là bạn đang sử dụng phân vùng, bạn sẽ được tốt gửi mỗi tin nhắn trực tiếp đến kafka mà không cần đệm chúng trên mặt của bạn và gửi hàng loạt.

+0

cảm ơn câu trả lời của bạn. Vì vậy, bạn đang sử dụng chỉ có một đối tượng kết nối? Ngoài ra, bạn có gửi tin nhắn trực tiếp từ bên trong ứng dụng của mình hoặc từ một quy trình phụ trợ riêng biệt không? Nếu bạn đang sử dụng kafka-producer trong ứng dụng web của bạn thì đó là đối tượng cấp ứng dụng? Tôi có nghĩa là làm thế nào để số lượng các kết nối được thành lập ở lại hạn chế? Khi tôi sử dụng php kafka của php, như php đã chia sẻ không có gì vòm, như nhiều kết nối được mở ra khi có yêu cầu, jst giới hạn bởi các thiết lập máy chủ. Đó là một điều rất quan tâm. – Shades88

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