Это может быть глупый вопрос, но я и несколько приятелей обсуждали потенциальные ограничения TCP. У нас есть приложение, которое будет прослушивать клиентов (например, шлюз) и направлять данные всех подключенных клиентов через одного подключенного издателя kafka в одну тему.
Один из моих собеседников говорит, что TCP будет проблемой для этого шлюза, потому что он собирается устанавливать новое соединение для каждого отправляемого сообщения (проблема не в kafka, а в самом базовом транспортном протоколе), каждый раз требуя новый порт. С той скоростью, с которой мы будем отправлять сообщения этим клиентам (гигабайты), у kafka не хватит портов для чтения ??
Я занимался разработкой в течение нескольких лет и никогда не слышал об этом раньше, и хотел бы получить более низкое понимание (как я думал, я имел) того, как работает TCP. Насколько я понимаю, когда вы устанавливаете TCP-соединение, это соединение остается открытым до тех пор, пока оно не будет заблокировано приложением или принудительно закрыто сервером или клиентом. Данные, которые отправляются через это соединение, являются потоком и не будут открывать / закрывать новые соединения независимо от 3 В (объем, скорость, разнообразие).
Что касается портов, один порт используется для широковещательной передачи, а порт внутреннего дескриптора файла - это то, что приложение управляет для чтения / записи отдельных клиентов. Я никогда не понимал TCP, чтобы устанавливать новые соединения для каждого пакета, который он пишет.
Я заранее прошу прощения, если этот вопрос не является прямым или слишком расплывчатым. Я действительно сбит с толку и надеюсь, что кто-нибудь сможет предоставить больше контекста тому, что говорят мои коллеги?
SO_REUSEADDR
для более быстрого закрытия сокетов, увеличения диапазона временных портов и т. Д. Кроме того, TCP_FASTOPEN
можно использовать несколько переключателей на уровне ОС, чтобы обойти другие хорошо известные ограничения TCP. В любом случае, нет смысла обсуждать ограничения TCP, когда у вас даже нет рабочей нагрузки для тестирования.