Kafka中一些重要的组件的注意事项

Kafka中一些重要的组件的注意事项

Producer(生产者)

​ --生产者负责采集数据并把数据传输到kafka的某个topic中。比如:flum、java后台服务、shell脚本、logstash
–生产者是由多个进程组成的(可以有多个生产者组成)。一个生产者可以作为一个独立的进程,可以独立的分发数据
–多个生产者发送的数据时可以存储到同一个topic的同一个partition的
–一个生产者的数据也可以放到多个topic中

kafka集群:

​ --kafka集群可以保存多种数据类型的数据,一种数据类型可以存放到topic中,一个kafka集群可以创建多个topic
–每个topic可以创建一个或多个分区,分区的数量和副本的数量是在创建topic时指定的,在后期,某个topic的分区数可以重新指定(只能由少增多)
–每个分区是由多个segment组成的,segment的大小是可以配置的,默认是1G。segment里有两种类型的文件(.index和.log文件),index文件是存放log数据对应的索引,log是存放数据的。
–kafka是具有多副本机制的,原始数据和副本数据是不可以在同一个节点中的。

Consumer Group:

​ --Consumer(消费者)负责消费数据:flume、SparkStreaming、Storm…
–一个ConsumerGroup也被称为Consumer集群(实质并不是集群,只是人们习惯性称之)
–新增或减少Consumer的数量会触发kafka的负载均衡
–ConsumerGroup可以消费一个或多个分区的数据,相反,一个分区的数据同时只能被一个Consumer消费
–ConsumerGroup成员之间消费的数据各不相同,在同一个Group中,数据是不可以重复消费的(一次仅一次的语义)

Kafka核心组件(重要)

l Topic :消息根据Topic进行归类

l Producer:发送消息者

l Consumer:消息接受者

l broker:每个kafka实例(server)

l Zookeeper:依赖集群保存meta信息。

Kafka整体结构图

Kafka名词解释和工作方式

在这里插入图片描述

l Producer :消息生产者,就是向kafka broker发消息的客户端。

l Consumer :消息消费者,向kafka broker取消息的客户端

l Topic :我们可以理解为一个队列。

l Consumer Group (CG):这是kafka用来实现一个topic消息的广播(发给所有的consumer)和单播(发给任意一个consumer)的手段。一个topic可以有多个CG。topic的消息会复制(不是真的复制,是概念上的)到所有的CG,但每个partion只会把消息发给该CG中的一个consumer。如果需要实现广播,只要每个consumer有一个独立的CG就可以了。要实现单播只要所有的consumer在同一个CG。用CG还可以将consumer进行自由的分组而不需要多次发送消息到不同的topic。

l Broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。

l Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序。

l Offset:kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。当然the first offset就是00000000000.kafka。

Consumer与topic关系

本质上kafka只支持Topic;

l 每个group中可以有多个consumer,每个consumer属于一个consumer group;

通常情况下,一个group中会包含多个consumer,这样不仅可以提高topic中消息的并发消费能力,而且还能提高"故障容错"性,如果group中的某个consumer失效那么其消费的partitions将会有其他consumer自动接管。

l 对于Topic中的一条特定的消息,只会被订阅此Topic的每个group中的其中一个consumer消费,此消息不会发送给一个group的多个consumer;

那么一个group中所有的consumer将会交错的消费整个Topic,每个group中consumer消息消费互相独立,我们可以认为一个group是一个"订阅"者。

l 在kafka中,一个partition中的消息只会被group中的一个consumer消费(同一时刻);

一个Topic中的每个partition,只会被一个"订阅者"中的一个consumer消费,不过一个consumer可以同时消费多个partition中的消息。

l kafka的设计原理决定,对于一个topic,同一个group中不能有多于partition个数的consumer同时消费,否则将意味着某些consumer将无法得到消息。

**kafka***只能保证一个partition中的消息被某个consumer消费时是顺序的;事实上,从Topic角度来说,当有多个partitions时,消息仍不是全局有序的。

kafka不是完全同步,也不是完全异步,是一种ISR机制:

  1. leader会维护一个与其基本保持同步的Replica列表,该列表称为ISR(in-sync Replica),每个Partition都会有一个ISR,而且是由leader动态维护
  2. 如果一个flower比一个leader落后太多,或者超过一定时间未发起数据复制请求,则leader将其重ISR中移除
  3. 当ISR中所有Replica都向Leader发送ACK时,leader才commit

既然所有Replica都向Leader发送ACK时,leader才commit,那么flower怎么会leader落后太多?
producer往kafka中发送数据,不仅可以一次发送一条数据,还可以发送message的数组;批量发送,同步的时候批量发送,异步的时候本身就是就是批量;底层会有队列缓存起来,批量发送,对应broker而言,就会收到很多数据(假设1000),这时候leader发现自己有1000条数据,flower只有500条数据,落后了500条数据,就把它从ISR中移除出去,这时候发现其他的flower与他的差距都很小,就等待;如果因为内存等原因,差距很大,就把它从ISR中移除出去。

        </div>
					<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-7f770a53f2.css" rel="stylesheet">
            </div>

Kafka中一些重要的组件的注意事项

Producer(生产者)

​ --生产者负责采集数据并把数据传输到kafka的某个topic中。比如:flum、java后台服务、shell脚本、logstash
–生产者是由多个进程组成的(可以有多个生产者组成)。一个生产者可以作为一个独立的进程,可以独立的分发数据
–多个生产者发送的数据时可以存储到同一个topic的同一个partition的
–一个生产者的数据也可以放到多个topic中

kafka集群:

​ --kafka集群可以保存多种数据类型的数据,一种数据类型可以存放到topic中,一个kafka集群可以创建多个topic
–每个topic可以创建一个或多个分区,分区的数量和副本的数量是在创建topic时指定的,在后期,某个topic的分区数可以重新指定(只能由少增多)
–每个分区是由多个segment组成的,segment的大小是可以配置的,默认是1G。segment里有两种类型的文件(.index和.log文件),index文件是存放log数据对应的索引,log是存放数据的。
–kafka是具有多副本机制的,原始数据和副本数据是不可以在同一个节点中的。

Consumer Group:

​ --Consumer(消费者)负责消费数据:flume、SparkStreaming、Storm…
–一个ConsumerGroup也被称为Consumer集群(实质并不是集群,只是人们习惯性称之)
–新增或减少Consumer的数量会触发kafka的负载均衡
–ConsumerGroup可以消费一个或多个分区的数据,相反,一个分区的数据同时只能被一个Consumer消费
–ConsumerGroup成员之间消费的数据各不相同,在同一个Group中,数据是不可以重复消费的(一次仅一次的语义)

Kafka核心组件(重要)

l Topic :消息根据Topic进行归类

l Producer:发送消息者

l Consumer:消息接受者

l broker:每个kafka实例(server)

l Zookeeper:依赖集群保存meta信息。

Kafka整体结构图

Kafka名词解释和工作方式

在这里插入图片描述

l Producer :消息生产者,就是向kafka broker发消息的客户端。

l Consumer :消息消费者,向kafka broker取消息的客户端

l Topic :我们可以理解为一个队列。

l Consumer Group (CG):这是kafka用来实现一个topic消息的广播(发给所有的consumer)和单播(发给任意一个consumer)的手段。一个topic可以有多个CG。topic的消息会复制(不是真的复制,是概念上的)到所有的CG,但每个partion只会把消息发给该CG中的一个consumer。如果需要实现广播,只要每个consumer有一个独立的CG就可以了。要实现单播只要所有的consumer在同一个CG。用CG还可以将consumer进行自由的分组而不需要多次发送消息到不同的topic。

l Broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。

l Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序。

l Offset:kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。当然the first offset就是00000000000.kafka。

Consumer与topic关系

本质上kafka只支持Topic;

l 每个group中可以有多个consumer,每个consumer属于一个consumer group;

通常情况下,一个group中会包含多个consumer,这样不仅可以提高topic中消息的并发消费能力,而且还能提高"故障容错"性,如果group中的某个consumer失效那么其消费的partitions将会有其他consumer自动接管。

l 对于Topic中的一条特定的消息,只会被订阅此Topic的每个group中的其中一个consumer消费,此消息不会发送给一个group的多个consumer;

那么一个group中所有的consumer将会交错的消费整个Topic,每个group中consumer消息消费互相独立,我们可以认为一个group是一个"订阅"者。

l 在kafka中,一个partition中的消息只会被group中的一个consumer消费(同一时刻);

一个Topic中的每个partition,只会被一个"订阅者"中的一个consumer消费,不过一个consumer可以同时消费多个partition中的消息。

l kafka的设计原理决定,对于一个topic,同一个group中不能有多于partition个数的consumer同时消费,否则将意味着某些consumer将无法得到消息。

**kafka***只能保证一个partition中的消息被某个consumer消费时是顺序的;事实上,从Topic角度来说,当有多个partitions时,消息仍不是全局有序的。

kafka不是完全同步,也不是完全异步,是一种ISR机制:

  1. leader会维护一个与其基本保持同步的Replica列表,该列表称为ISR(in-sync Replica),每个Partition都会有一个ISR,而且是由leader动态维护
  2. 如果一个flower比一个leader落后太多,或者超过一定时间未发起数据复制请求,则leader将其重ISR中移除
  3. 当ISR中所有Replica都向Leader发送ACK时,leader才commit

既然所有Replica都向Leader发送ACK时,leader才commit,那么flower怎么会leader落后太多?
producer往kafka中发送数据,不仅可以一次发送一条数据,还可以发送message的数组;批量发送,同步的时候批量发送,异步的时候本身就是就是批量;底层会有队列缓存起来,批量发送,对应broker而言,就会收到很多数据(假设1000),这时候leader发现自己有1000条数据,flower只有500条数据,落后了500条数据,就把它从ISR中移除出去,这时候发现其他的flower与他的差距都很小,就等待;如果因为内存等原因,差距很大,就把它从ISR中移除出去。

        </div>
					<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-7f770a53f2.css" rel="stylesheet">
            </div>

猜你喜欢

转载自blog.csdn.net/Z_Date/article/details/84023668