kafka基础知识总结(需更)

kafka基础知识总结(需更)

   张吉吉     2021年7月27日 22:10     1408    

Kafka的作用

解耦

避免不同模块之间调用,导致代码的修改。

 

异步

一些非必要的业务逻辑不需要去一直等待其执行,否则时间过长会引起使用者的反感。

 

削峰

将查询数据库的请求暂存起来。慢慢处理,避免数据库的崩溃。

 

Mq的两种模式

点对点模式

(1)发送到队列中的消息只能被一个消费者进行消费。

(2)消息是由消费者去拉取,所以消费者可以控制消息消费的速率。

(3)但是,消费者并不能确定是否又消息需要消费,需要单独设置线程去监控消息。

 

订阅模式

(1)发送到队列的消息可以被多个订阅者订阅。

(2)消息是消息队列主动推送给消费者的,所以无需确定是否有消息需要去消费。

(3)但是消息队列是消费者推送过来的,所以消费者不能控制推送速率,所以有可能无法承载如此多的消息,也有可能因为推送消息的量少,造成资源浪费。

 

相关名称

broker

一个服务器就是一个broker

 

topic

一个borker中可以存在多个topictopic是存放消息的载体。

 

partition

每个topic中可以有多个partition。多个partition可以提高负载,提高kafka的吞吐量。

 

replica

每一个分区都有多个副本,副本的作用是做备胎。

当主分区(Leader)故障的时候会选择一个备胎(Follower)上位,成为Leader

kafka中默认副本的最大数量是10个,且副本的数量不能大于Broker的数量,followerleader绝对是在不同的机器,同一机器对同一个分区也只可能存放一个副本(包括自己)。

 

offset

偏移量

 

Consumer Group

我们可以将多个消费组组成一个消费者组,在kafka的设计中同一个分区的数据只能被消费者组中的某一个消费者消费。同一个消费者组的消费者可以消费同一个topic的不同分区的数据,这也是为了提高kafka的吞吐量

 

partition的写入规则

1 partition在写入的时候可以指定需要写入的partition,如果有指定,则写入对应的partition

2 如果没有指定partition,但是设置了数据的key,则会根据key的值hash出一个partition

3、如果既没指定partition,又没有设置key,则会轮询选出一个partition

 

partitiongroup

一个topic可以配置几个partition。这几个partition是分配在不同节点。

Producer在写入消息时,如同上边所说的规则,写入partition

consumer在接受数据的时候,是根据group来接收。

Kafka确保每个partition只能同一个group中的同一个consumer进行接收。

如果要重复消费,就定义不同的组。

Zookeerper中保存这每个topic下的每个partition在每个group中消费的offset

新版本的offset保存在了一个__consumer_offsets的分区中。默认是50个分区。

 

实验

当我只有一个partition的时候, 开了一个group3consumer

只有一个consumer在不停的接收producer产生的数据。

当我有三个partition的时候,开了一个group3consumer

然后每个consumer都会接收到不同partition发过来的数据。Consumer接收和partition是对应的。

 


文章评论

0

其他文章