kafka配置SASL/PLAINTEXT权限之后,生产者发送消息很慢,是否正常

Home . 发表于: 2020-08-25   最后更新时间: 2020-08-25 14:35:50   2,143 游览

kafka配置SASL_PLAINTEXT权限之后,生产者发送消息要几十秒,我去掉权限之后再测试发现只需要几秒就发送完成了,想了解一下这样是否正常?如果不正常的话如何解决这个问题?

kafka版本:2.12-2.3.0
zookeeper版本:3.4.10

public class ProducerMain {

    private static Producer<String, String> createProducer() {
        System.setProperty("java.security.auth.login.config", "D:\\client.conf");
        // 设置 Producer 的属性
        Properties properties = new Properties();
        properties.put("bootstrap.servers", "192.168.1.143:9092");
        properties.put("acks", "-1");
        properties.put("retries", 1);
        properties.put("max.block.ms", 40000);
        properties.put("linger.ms", 300);
        properties.put("key.serializer", StringSerializer.class.getName());
        properties.put("value.serializer", StringSerializer.class.getName());

        properties.put("security.protocol", "SASL_PLAINTEXT");
        properties.put("sasl.mechanism", "PLAIN");

        return new KafkaProducer<>(properties);
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
        System.err.println("创建发送对象:" + sf.format(new Date()));
        Producer<String, String> producer = createProducer();

        System.err.println("准备发送消息:" + sf.format(new Date()));
        ProducerRecord<String, String> message = new ProducerRecord<>("permissiontopic", "message2");
        // 同步发送消息
        System.err.println("准备send:" + sf.format(new Date()));

        //这一句用了10秒
        Future<RecordMetadata> sendResultFuture = producer.send(message);
        System.err.println("取到消息返回值:" + sf.format(new Date()));

        //这一句也用了10秒
        RecordMetadata result = sendResultFuture.get();
        System.err.println("消息发送完成:"+ sf.format(new Date()) +",topic:" + result.topic() + ",partition:" + result.partition() + ",offset:" + result.offset());
    }
}

写了个测试类发现,send和get方法花费时间比较久,想了解下原因

另外zookeeper和kafka权限的配置基本上是参照这个帖子来的
https://www.cnblogs.com/ilovena/p/10123516.html

发表于 2020-08-25

第一次慢额,正在认证,你批量发送1000条以上来进行测试。
.get() 这属于阻塞形式的发送,需要等待kafka集群返回结果。

Home . -> 半兽人 3年前

谢谢解答,我一会试一下。他这个认证多久一次?还有生产者如果很久没发消息会不会与broker断开,如果端口的话,再次发送消息是不是再次认证

半兽人 -> Home . 3年前

kafka的客户端都是长连接,只有第一次。

Home . -> 半兽人 3年前

好的 非常感谢,初学kafka遇到很多问题,不知道去哪问。我先试一下,有问题再来提问。再次感谢

你的答案

查看kafka相关的其他问题或提一个您自己的问题