Kafka是众多MQ(Message Queue)中的一种,MQ普遍都会面临消息丢失的问题,造成消息丢失的原因有很多种,例如:
- 生产者将消息发送,但是不确保消息到达MQ中
- MQ接收到消息,但是消息丢失了
- …
本文实验采用的Kafka是kafka_2.11-1.1.1版本
Kafka发送消息模型
考虑有一个Topic,只有一个分区(num.partitions=1),副本因子是2(replication.factor=2).
在Kafka中,生产者生产的消息要分配到不同的partition中,而该Topic只有一个分区,所以只会生产进这个partition.
Note: 在Kafka中,生产者与消费者只与Partition leader 交互.
当ack=0时
生产者只管发送数据到Kafka中,不在意Kafka是否接收到. 这样丢数据的概率是比较高的.
Properties props = new Properties();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put(ProducerConfig.ACKS_CONFIG, "0");
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serializat