Kafka简介
Kafka是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下:
● 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能
● 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输
● 支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输
● 同时支持离线数据处理和实时数据处理
以上是官方对kafka的介绍,可以看出kafka想要解决的主要问题是数据的读取问题,总结下来功能有两点:
1.数据一定能被处理
2.能快速获取需要数据
所以在我看来,可以把kafka看做分布式系统上的“缓冲区”(“内存”?),而kafka的实现方式与数据库有类似之处,很多概念可以和HDFS类比。
Kafka中的概念
● Broker:
Kafka集群包含一个或多个服务器,这种服务器被称为broker。
找一个类比的概念:HDFS的DataNode。
● Topic
每条发布到Kafka集群的消息都有一个类别,这个类别被称为topic。(物理上不同topic的消息分开存储,逻辑上一个topic的消息虽然保存于一个或多个broker上但用户只需指定消息的topic即可生产或消费数据而不必关心数据存于何处)
● Partition
parition是物理上的概念,每个topic包含一个或多个partition,创建topic时可指定parition数量。每个partition对应于一个文件夹,该文件夹下存储该partition的数据和索引文件
● Replication
replication的出现是为了实现资源的持续化和高可用性,换句话说就是保证在单节点宕机时数据不会轻易丢失。
● Leader Election
kafka中leader election有两种概念:
1.基于zookeeper的leader election,对象是consumer。Kafka通过Zookeeper管理集群配置,选举leader,以及在consumer group发生变化时进行rebalance。
2.面向partition的leader election,对象是replication。引入replication之后,同一个partition可能会有多个replication,而这时需要在这些replication之间选出一个leader,producer和consumer只与这个leader交互,其它replica作为follower从leader中复制数据。
● Producer
消息的生产者,负责发布消息到Kafka broker。
● Consumer
消息的消费者,每个consumer属于一个特定的consumer group(可为每个consumer指定group name,若不指定group name则属于默认的group)。使用consumer high level API时,同一topic的一条消息只能被同一个consumer group内的一个consumer消费,但多个consumer group可同时消费这一消息。