一:生产者概览
1.不同的应用场景对消息有不同的需求,即是否允许消息丢失、重复、延迟以及吞吐量的要求。不同场景对Kafka生产者的API使用和配置会有直接影响。
eg:信用卡事务处理系统,不允许消息重复混和丢失,延迟最大500ms,对吞吐 量要求较高。
eg:保存网站的点击信息,允许少量的消息丢失和重复,延迟可以稍高(用户点击连接可以马上加载出页面即可),吞吐量取决于用户使用网站的频度
2.Kafka发送消息的主要步骤
消息格式:每个消息是一个ProducerRecord对象,必须指定所属的Topic和消息值Value,此外还可以指定消息所属的Partition以及消息的key。
1>序列化ProducerRecord;
2>如果ProducerRecord中指定了Partition,则Partitioner不做任何事情;否则,Partitioner根据消息的key得到一个Partition。这是生产者就知道向那个Topic下的那个Partition发送这条消息。
3>消息被添加到相应的batch中,独立线程将这些batch发送到Broker上
4>broker收到消息会返回一个响应。如果消息成功写入kafka,则返回RecordMetaData对象,该对象包含了Topic信息、Partition信息、消息在Partition中的Offset信息;若失败返回一个错误。
3.Kafka的顺序保证。Kafka保证同一个partition中的消息是有序的,即如果生生产者按照一定的顺序发送消息,broker就会按照这个顺序把他们写入partition,消费者也会按照相同的顺序读取他们。
eg:向账户先存100再取出来和先取100再