深入浅出kafka②

89 阅读2分钟
  • 持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

生产者

  • 在生产者写入消息之前需要配置的必需条件如
    • 需要创建kafka的配置文件对象,来配置此次的消费者对应的broker.id 一般形式就如"127.0.0.1:9092"
    • 配置broker收到消息的键值的类型,目前项目中都会配置字节数组类型
  • 下面实现最简单的同步kafka生产者发送消息

public void producer() {
    // 基础配置 简单省略键值的序列化格式
    Properties kafkaConsumerConfig = new Properties();
    kafkaConsumerConfig.put("servers","127.0.0.1:9092");
    // 生产者
    KafkaProducer producer = new KafkaProducer(kafkaConsumerConfig);
    // 消息体
    ProducerRecord<String,String> producerRecord = new ProducerRecord<String,String>("xxxx","","");
    producer.send(producerRecord);
}

image.png

  • 上述代码是生产者使用send函数将ProducerRecord对象发送
  • 我们使用的是同步写入,因为send函数是一个是一个Future类型的,我们无法感知到是否发送成功

image.png

  • 我们可以使用异步写入这样有一个回调方法,可以形成写入闭环

image.png

  • 上图中callBack有onCompletion此方法源码中会判断异常问题并打印出来

同步异步问题

  • 上述如果是同步方法我们每次需要等待Future方法的get()函数执行完才能进行下面操作,相当于阻塞了我们的业务流程,会使系统的性能下降很多
  • 我们使用异步进行写入时,是否又可以进行一个深入改造
  • 我们使用多线程去使用消费者写入
    1. 那么我们的就将上面的异步方法继承Threa线程,将异步代码写到run()方法中
    2. 第一步完成后,在使用时创建一个线程池,每次将消费者线程提交到任务中