这是我参与「第四届青训营 」笔记创作活动的第21天
kafka概念
由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,是一个流式处理平台,它可以处理消费者在网站中的所有动作流数据。目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
kafka常用名词解释
生产者(producer)和消费者(consumer)
生产者创建消息,消费者读取消息。生产者创建的消息可以指定或不指定分区,不指定分区则均匀散列到所有分区,消费者可以订阅一个或多个主题。
消费者通过检查消息的偏移量来区分消息是否已读
每个消息的偏移量是唯一的,消费者把偏移量保存到kafka或zookeeper中。
kafka生产者发送消息的三种模式
-
直接发送消息:发送消息但不关注是否成功
ProducerRecord<String, String> record = new ProducerRecord<>("topicName", "key", "value"); try { producer.send(record); } catch (Exception e) { e.printStackTrace();} -
同步发送消息
ProducerRecord<String, String> record = new ProducerRecord<>("topicName", "key", "value"); try { producer.send(record).get(); } catch (Exception e) { e.printStackTrace();} -
异步发送消息
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
- 消费者订阅消息时也必须指定订阅哪一个消息
Partition
每个Topic包含一个或多个Partition。kafka的分配单位是Partition
每个Partition只会在一个Broker上
Kafka服务器(broker)和集群
- 一个独立的kafka服务器被称为broker
- broker接收生产者的消息,为消息设置偏移量,并将消息提交到磁盘保存
- 单个broker可以处理上千个分区和秒级百万消息数量
- 当消息达到上限时,broker就会删除保留消息