1、Kafka简介
Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域(hadoop集群)、物联网领域。其主要设计目标如下:
- 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级别以上数据也能保证常数时间的访问性能;
- 高吞吐率,即使在非常廉价的机器上也能做到单机支持每秒100K条消息的传输;
- 支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输,同时支持离线数据处理和实时数据处理;
2、Kafka应用场景
Kafka本质上是一个消息队列(MQ,Message Queue),使用消息队列解决的问题或场景如下:
- 解耦:允许我们独立修改队列两边的处理过程而互不影响;
- 冗余:有些场景,我们在处理数据的过程中会失败造成数据丢失。消息队列把数据进行持久化直到它们以及被完全处理,降低了数据丢失的风险,确保数据被安全的保存直到使用完成;
- 峰值处理能力:不会因为突发的流量请求导致系统崩溃,消息队列能够使服务顶住突发的访问压力,有助于解决生成消息和消费消息的处理速度不一致的情况;
- 异步通信:消息队列允许用户把消息放入队列但不立即处理它,等待后续进行消费处理;
3、Kafka专业术语
下面为Kafka的一些重要术语,让大家对Kafka有个整体的认识和感知:
- Producer:即消息生产者,向Kafka Broker发消息的客户端;
- Consumer:即消息消费者,从Kafka Broker读取消息的客户端;
- Consumer Group:即消费者组,消费者组内的每个消费者负责消费不同分区的数据,以提高消费能力。一个分区只能由组内一个消费者消费,不同消费者组之间互不影响;
- Borker:一台Kafka机器就是一个Broker,一个集群是由多个Broker组成的且一个Broker可以容纳多个Topic;
- Topic:可以简单理解为队列,Topic将消息分类,生产者和消费者面向的都是同一个Topic;
- Partition:为了实现Topic扩展性,提高并发能力,一个大的Topic可以分布到多个Broker上,一个Topic可以分为多个Partition进行存储,每个Partition是一个有序队列;
- Replica:即副本,为实现数据备份的功能,保证集群中的某个节点发生故障时,该节点上的Partition数据不能丢失,且Kafka仍然能够继续工作,为此Kafka提高了副本机制,一个Topic的每个Partition都有若干个副本,一个Leader副本和若干个Follwer副本;
- Leader:即每个分区多个副本的主副本,生产者发送数据的对象,以及消费者消费数据的对象都是Leader;
- Follwer:即每个分区多个副本的从副本,会实时从Leader副本中同步数据,并保持和Leader数据同步。Leader发送故障时,某个Follwer还会被选举并成为新的Leader,且不能跟Leader在同一个broker上,防止崩溃时数据可恢复;
- Offset:消费者消费消息的位置信息,监控数据消费到什么位置,当消费者挂掉再重新恢复的时候,可以从消费位置继续消费;
- ZooKeeper:Kafka集群能够正常工作的基础,Zookeeper帮助Kafka存储和管理集群元数据信息。在最新版本中,以及慢慢要脱离Zookeeper;
- record:实际写入 Kafka 中并可以被读取的消息记录。每个 record 包含了 key、value 和 timestamp;
4、小结
上面总结了Kafka的一些基础内容,下一篇继续分析、总结和分享Kafka的工作进程、存储机制等。