卡夫卡 - 制片人致谢

Pun*_*cky 8 java apache-kafka

我在视频教程中看到,当制作人发布消息时,Kafka Broker支持3种类型的确认.

0 - 火和忘记1 - 领导者确认2 - 所有经纪人的确认

我正在使用Kafka的Java API发布消息.这是必须为每个代理使用特定于每个代理的server.properties设置的东西,还是必须由生产者设置的东西?如果必须由生产者设置,请说明如何使用Java API进行设置.

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;

import java.util.Properties;

public class KafkaProducerApp {

    public static void main(String[] args){
        Properties properties = new Properties();
        properties.put("bootstrap.servers","localhost:9092,localhost:9093,localhost:9094");
        properties.put("key.serializer","org.apache.kafka.common.serialization.StringSerializer");
        properties.put("value.serializer","org.apache.kafka.common.serialization.StringSerializer");

        KafkaProducer<String,String> kafkaProducer = new KafkaProducer<String, String>(properties);

        try{
            for(int i=0;i<150;i++) {
                RecordMetadata ack = kafkaProducer.send(new ProducerRecord<String, String>("replicated_topic", Integer.toString(i), "MyMessage" + Integer.toString(i))).get();
                System.out.println(" Offset = " + ack.offset());
                System.out.println(" Partition = " + ack.partition());
            }
        } catch (Exception ex){
            ex.printStackTrace();
        } finally {
            kafkaProducer.close();
        }



    }

}
Run Code Online (Sandbox Code Playgroud)

vah*_*hid 9

它是一个生产者属性,设置类似于代码中的其他属性:

properties.put("acks","all");
Run Code Online (Sandbox Code Playgroud)

可以在此处找到所有可配置生产者属性的列表.

您可能还想查看与此生产者配置相关的代理(或主题)属性 min.insync.replicas.


fgu*_*gul 7

我认为您应该了解acks属性实际做了什么,并查看幕后情况。如果没问题,你会看到这个属性是由 producer配置

例如,您不能丢失任何消息,例如审核日志。以下代码我们将如何启动我们的生产者配置:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092,localhost:9093");
props.put("acks", "all"); //We are using acks=all in order to get the strongest guarantee we can.
props.put("retries", "3");
props.put("max.in.flight.requests.per.connection", "5");
Run Code Online (Sandbox Code Playgroud)

这是一个小而强大的变化,对消息是否会到达有重大影响。

这张来自Kafka In Action书中的图片更清楚地代表了acks财产:

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明