再谈卡夫卡Kafka
大家好,这一期呢,我们再继续来研究一下卡夫卡Kafka。
有一期我们粗略的谈了一下Kafka的特点和工作方式。这一期我们先来谈一下Kafka里面的一些基本的概念。
Producer即生产者, 是那些向卡夫卡发送消息的应用程序。这里的消息是指包含小型到中型大小的数据块的包裹。
打个比方说,你如果想向卡夫卡发送一个文本文件的话。首先你需要一个生产者应用程序,这个应用程序发送的消息,就是包含这个文件一行行的字节数据。直至把整个文件发送完成。
另外一个例子就是对数据库的访问。你可以用生产者应用程序,发送包含每行数据的消息,直至发送完成整个查询。
Consumer即消费者,是那些接收Kafka发送过来的消息的应用程序。
相信到这里你也看出来了,Kafka的生产者不会直接向消费者发送消息。
换句话就是生产者不知道哪些消费者会使用自己发送的数据,而消费者只需要知道找卡夫卡要数据就可以了。
以上面的文本文件传输为例,消费者程序会从消息中读取一行一行的数据,直到没有后续消息发送过来。
Broker即经纪人,就是卡夫卡的服务器, 这个角色就是从生产方接收数据,然后向接受方发送出去。
Cluster即集群,是一组完成共同目标的计算机。这是一个分布式系统的概念。在整套系统中会有多个卡夫卡的服务器也就是经纪人。而负责管理这些经纪人的我们称之为zookeeper,就像动物园的管理员一样。
Topic即为主题,是用来标记数据的唯一性。比方说消费者向卡夫卡要数据。卡夫卡无法提供数据,因为不知道消费者要什么数据。卡夫卡可能在管理很多的生产者,所以当消费者索要数据的时候必须指明什么样的数据是他想要的。这就是为什么必须在消息中设定topic的原因。
Topic的特点是唯一性,他可能是一个随机数,也可能是一个guid。
多个生产者可能发出具有相同topic信息,当然了,也可能多个消费者来处理具有相同topic的信息。
Partition即分区,分区的概念就是当一段数据非常庞大的时候,需要把它分成几个部分,然后把这几部分分发给不同的计算机, 而卡夫卡本身它就是一个计算机集群。
分区的数量不是由卡夫卡集群来决定的,而是由我们自己来决定的。在创建一个topic的时候,就制定了是否要进行分区,以及分多少个区。
这些分区发送出去以后会分别保存在不同的服务器上。这些小的分区在单独的服务器上,以后不能再进行分解。
Offset即位移,就是在分区中设定的序列号,这些号码一旦设定,不会被改变。
我们在定位一个消息的时候,我们需要三个要素:一个是主题名字,一个是分区号,一个是位移也就是序号。
Consumer groups即消费者组,是指一组消费者表现为一个单独的逻辑单元。当我们有多个生产者在提供数据,同时卡夫卡这边有多个服务器在存储数据和分发数据的时候,消费者这边也要相应的提供多个计算机来处理这样庞大的数据流,打个比方说,kafka的集群发来了100个分区,我们可以让消费者的每台电脑处理两个分区,这样我们需要50个消费者作为一个整体。如果每个消费者可以处理10个分区,那我们只需要10个消费者作为一组就可以了。
如果每个消费者只处理一个分区的话,那我们在这个组里需要100个消费者了。
这里有一个细节我们需要注意,卡夫卡系统是不允许两个消费者读取一个分区的。这个限制主要是防止重复读取同一块数据。
以上是我对这个话题一点心得看法。仅供参考,欢迎讨论, 欢迎拍砖。
网友评论