Does Kafka bootstrap server have biased connections from clients?
Kafka clientは以下のようなフローでbrokerに接続します。
- まずbootstrap.serversに指定されたいずれかのbrokerに接続し、metadata(partitionのleader)を得る
- partitionのleaderに対してconnectionを開く
- produce/consumeを開始する
最初に最低1台に繋げればmetadataを取得できるので、通常bootstrap.serversにはクラスターの全台ではなく数台のみ指定します。
ここでもしmetadataを取得したあと最初に接続したbrokerへのコネクションを閉じる仕組みが無いと、bootstrap.serversはほとんど全clientに対するソケットを保持することになり、いくらクラスターを拡張してもclientが増えればbootstrap.serversのコネクション数がボトルネックとなってしまいます。
これを避ける仕組みはちゃんとあって、connections.max.idle.ms
過ぎると必要のないコネクションは閉じるようになってます。