You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制Kafka生产者仅向指定端口投递数据?

Kafka 端口投递限制问题

我的配置与操作

我已完成Kafka的server.properties配置:

listeners=PLAINTEXT://:29092, SSL://:29093

同时完成了SSL相关配置,可通过29092端口进行明文连接,通过29093端口进行SSL连接。

我尝试通过以下代码向29093端口生产数据:

props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, System.getProperty("kafkaPort", "localhost:29093"));

// SSL相关配置已在props中完成

Producer<Long, String> producer = new KafkaProducer<>(props, new LongSerializer(), new StringSerializer());

final ProducerRecord<Long, String> record = new ProducerRecord<>(System.getProperty("kafkaTopic", "dqerror"), content);

RecordMetadata metadata = producer.send(record).get();

但发布后发现dqerror主题在两个端口都能被访问到,且通过任意端口都能获取到数据。请问是否可以限制仅向指定端口投递数据?

问题解答

首先要澄清核心误解:Kafka的主题是集群级别的全局资源,不存在“按端口创建主题”或“向指定端口投递数据”的概念。你看到的现象本质是:

  • 29092和29093只是同一个broker提供的两种不同连接入口(明文/SSL),它们指向的是同一个Kafka实例和同一套主题数据。
  • 当你通过29093端口创建主题并发送数据后,主题本身就存在于broker中,自然可以通过另一个端口(29092)访问到——这不是数据被投递到了两个端口,而是同一个主题数据可以通过不同连接方式被访问。

为什么会出现这种情况?

Kafka的listeners配置只是客户端初始连接broker的入口:

  1. 客户端通过配置的bootstrap端口(比如29093)和broker建立连接后,broker会将自己的advertised.listeners(如果未配置则默认使用listeners)返回给客户端。
  2. 后续客户端的所有数据发送、请求操作,都会使用这个返回的地址,而不是初始连接的端口。
  3. 主题在Kafka中是全局存储的,和连接端口无关,所以任何能连接到broker的客户端(不管用哪个端口),都能访问到所有主题。

如何实现类似“限制仅通过指定端口操作数据”的需求?

如果你想限制只能通过SSL端口(29093)进行生产/消费,可以通过以下两种方式:

  1. 关闭明文端口
    修改server.properties,只保留SSL listener:

    listeners=SSL://:29093
    

    这样客户端只能通过SSL端口连接broker,完全禁止明文访问。

  2. 使用ACL权限控制
    给不同的listener设置权限,限制只有通过SSL listener的客户端才能操作目标主题:

    • 首先给listener命名(方便在ACL中区分):
      listeners=PLAINTEXT://:29092, SSL://:29093
      listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SSL:SSL
      
    • 然后创建ACL规则,允许只有通过SSL listener的用户对dqerror主题进行生产操作:
      kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:your-ssl-user --operation Write --topic dqerror --listener SSL
      
    • 同时可以禁止明文端口的用户操作该主题:
      kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --deny-principal User:* --operation Write --topic dqerror --listener PLAINTEXT
      

内容的提问来源于stack exchange,提问作者vel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 09:06:36