Kafka学习笔记(一) | 青训营笔记

61 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第21天

kafka概念

由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,是一个流式处理平台,它可以处理消费者在网站中的所有动作流数据。目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。

kafka常用名词解释

生产者(producer)和消费者(consumer)

生产者创建消息,消费者读取消息。生产者创建的消息可以指定或不指定分区,不指定分区则均匀散列到所有分区,消费者可以订阅一个或多个主题。
消费者通过检查消息的偏移量来区分消息是否已读
每个消息的偏移量是唯一的,消费者把偏移量保存到kafka或zookeeper中。

kafka生产者发送消息的三种模式

  1. 直接发送消息:发送消息但不关注是否成功

     ProducerRecord<String, String> record = new ProducerRecord<>("topicName", "key", "value");
     try {
     producer.send(record);
     } catch (Exception e) {
     	e.printStackTrace();}
    
  2. 同步发送消息

     ProducerRecord<String, String> record = new ProducerRecord<>("topicName", "key", "value");
     try {
     producer.send(record).get();
     } catch (Exception e) {
     	e.printStackTrace();}
    
  3. 异步发送消息

     private class DemoProducerCallback implements Callback {
         @Override
         public void onCompletion(RecordMetadata recordMetadata, Exception e) { if (e != null) { e.printStackTrace(); } }
     } 
     ProducerRecord<String, String> record = new ProducerRecord<>("topicName", "key", "value");
     producer.send(record, new DemoProducerCallback());
    

Topic

  • 是kafka数据写入操作的基本单元
  • 一个topic包含一个或多个Partition,常见topic时可指定一个或多个Partition,个数与服务器相同
  • 每条消息属于且只属于一个Topic
  • 生产者发布数据时,必须指定消息发布到哪一个Topic
  • 消费者订阅消息时也必须指定订阅哪一个消息

image.png

Partition

每个Topic包含一个或多个Partition。kafka的分配单位是Partition
每个Partition只会在一个Broker上

Kafka服务器(broker)和集群

  • 一个独立的kafka服务器被称为broker
  • broker接收生产者的消息,为消息设置偏移量,并将消息提交到磁盘保存
  • 单个broker可以处理上千个分区和秒级百万消息数量
  • 当消息达到上限时,broker就会删除保留消息