kafka是一款Apache组织下的一款开源流处理平台。由Scala开发语言编写实现。
流平台具备三个关键功能:segmentfault
kafka的主要应用场景:服务器
kafka的几个核心概念,理解这几个概念对kafka的正确使用十分重要。spa
1. topic
消息主题,不管是发布仍是消费都是以topic为单位,通常一个topic对应一种业务场景blog
2. partition
分区,一个主题能够对应1~N个分区,kafka能够保证单个分区的消息的FIFO,而不能保证整个topic消息的FIFO(除非该topic只有一个partition)。kafka的高吞吐的原理也是主要经过增长分区实现的。队列
3. broker
一个broker表示一台服务器,一个broker能够包含多个主题的多个分区。多个broker能够构成kafka集群。每一个broker有一个惟一的id。关于分区在broker上的分配策略后面会讲到。开发
4. producer
生产者,负责往指定的topic推送消息的角色。rem
5. consumer
消费者,负责从指定topic消费消息的角色。get
6. consumer group
消费组,一个消费组能够包含多个消费者,一个分区只能同时给同一个消费组内的一个消费者消费(这里要注意,若是是多个消费组同时消费一个分区是容许的,并且各自的消费偏移量互不干扰)。kafka
7.replication
副本集,副本分首领(leader)副本和跟随(follower)副本, 分区至少有一个leader副本,0~N个follower副本,producer和consumer负责跟leader副本交互,follower只负责同步leader的数据,以防在leader挂掉的时候,选举一个follower当选新的leader从而实现高可用。同步
8.offset
偏移量,标识一个消费者在分区中消费到了哪一个位置,消费者每次消费消息的时候都会带上offset,消费完能够自动提交当前的offset或手动提交,取决于配置。