该参数用于指定分区中必须有多少个副本接收到了这条消息后,生产者才会任务消息发送成功。
acks=0,生产者不等待任何服务器响应,只负责消息的生产。此时如果集群出现问题,则消息丢失。但是因为生产者无需等待返回值,因此能够最大速度发送消息,吞吐量最大。acks=1,默认值。只要Leader响应了成功接收消息,则判断为成功。但是如果Leader在接收消息后崩溃,则该消息丢失。acks=-1,所有Leader和Follower节点全部响应成功,生产者才会判断成功。此时安全级别最高,吞吐量最低。注意:该参数传递为字符串类型,而非int类型
properties.put(ProducerConfig.ACKS_CONFIG, "-1");生产者在发送消息时,出现问题的重试次数。
properties.put(ProducerConfig.RETRIES_CONFIG, 10);reties的间隔时间,默认为100ms
properties.put(ProducerConfig.RETRY_BACKOFF_MS_CONFIG, 300);生产者在发送消息时,并不会每条消息都做一次发送,而是将一批消息作为一次批次进行统一发送,以此来减少IO操作,提高发送效率。 该参数即指定发送消息的内存大小,按照字节数计算,而非消息数量。 但是生产者并非会等到batch填满才进行发送,未满甚至只有一条消息也有可能会被发送,因此该参数设置很大也不会太大影响到生产效率,但是设置很小会出现频繁发送的问题。
properties.put(ProducerConfig.BATCH_SIZE_CONFIG, 10240);该参数用于控制生产者发送的请求大小,可以指发送的单个消息的最大值,也可以指单个请求里所有消息的总大小。因为Broker对于消息最大值也有限制(message.max.size),因此两个参数最好保持一致。
properties.put(ProducerConfig.MAX_REQUEST_SIZE_CONFIG, 102400);