什么是Kafka
Kafka是最初由Linkedin公司开发,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目,也是一个开源【分布式流处理平台】,由Scala和Java编写,(也当做MQ系统,但不是纯粹的消息系统)
目前 Kafka 已经定位为一个分布式流式处理平台,它以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用。目前越来越多的开源分布式处理系统如 Cloudera、Storm、Spark、Flink 等都支持与 Kafka 集成
生产者与消费者机制
在Kafka中,生产者(producer)将消息发送给Broker,Broker将生产者发送的消息存储到磁盘当中,而消费者(Consumer)负责从Broker订阅并且消费消息,消费者(Consumer)使用pull这种模式从服务端拉取消息。而zookeeper是负责整个集群的元数据管理与控制器的选举。具体如下图所示。
Kafka的producer生产者发送到Broker分区策略
发布订阅的对象是主题(Topic),生产者将消息发送到指定的主题,消费者再对负责订阅的主题来进行消费。在Kafka里的分区机制是怎么样的呢?它是将主题划分成了多个分区(partition),每一个分区又有多个副本,在同一个主题下的不同分区里的消息也是不一样的。在生产者生产出来的每一条消息都只会发送到一个分区里,Kafka里的分区编号都是从0开始的,如果生产者向两个分区的主题发送一条消息,那么这条不是在分区0里,就是在分区1里。
那么如何指定消息到指定的分区里呢?
这时候就可以看看生产者的发送逻辑了,在此之前我们需要知道一个叫ProducerRecord的玩意,这个是什么?
ProducerRecord就是发送给Broker的Key/value键值对,封装基础数据信息,简称为PR。
内部结构