(二)kafka

内容:

1. kafka的核心概念

Topic:主题

Partition:分区

  分区具体在服务器上面表现为其实就是一个目录

一个主题下面,有多个分区,这些分区会存储到不同的kafka的服务器上面

或者我们可以这样说:其实就是在不同的主机上面建了不同目录

Producer:生产者

Consumer:消费者

Replica:就是kafka的副本,kafka的partition为了保证数据安全,所以每个分区partition可以 设置多个副本

    但是这些副本之间是有角色之分的,其中有一个是leader partition(replica之一),其余都是follower。

    我们的生产者生产数据的时候,是把数据发送到leader parition(leader replica)里面

    然后follower partition(follower replica)去leader partition那自己去同步数据。

    我们消费者消费数据的时候,也是从leader partition这去消费数据。

Consumer Group:消费者组,我们在消费数据的时候,会在代码里面指定一个group.id

  conf.setProperty(“group.id”,“testa”)

  group.id代表是一个消费组的名字。

 

 

如果多个消费者,多个消费者并行的消费,性能是很好

consumer grooup:testD

  consumer1

  consumer2

  consumer3

他们三个消费者要同时去消费TopicB(3个分区)

注意:一个分区,不会让同一个消费组里面的多个消费者消费的。

    一个消费者是可以消费多个分区的数据的

Controller:

  在大数据里面,这些分布式的文件系统,95%都是主从式的结构,有个别的是对等式的架构(es)

我们的kafka也是主从的脚骨,主节点叫controller,其余的就是从节点

 

/controller/

如何从broker节点,选举一个作为controller?

所有的服务器(broker节点)都往Zookeeper上注册

/brokers/ids/0,1,2(以各个broker编号命名)

 

谁先注册上,创建一个目录

/controller/->0 则0就是主节点(controller),则其他的为从节点

 

创建一个TopicA主题,3个分区,指定每个分区有3个副本(副本指定2个是比较好的)设计一个分布式的系统,
集群里面有服务器宕机,这是一个常态化的事 (kafka0.8之前,没有副本机制) 生产者发送数据到TopicA
-0(Leader) 消费者消费数据到TopicA-0(Leader) *****************************Kafka集群**************************************** -----------------------------------------------------------------------------------| Broker0 TopicA-0(leader) TopicA-1 TopicA-2 -----------------------------------------------------------------------------------| Broker1 TopicA-1(leader) TopicA-0(follower) 去 TopicA-0(leader)同步数据 TopicA-2 -----------------------------------------------------------------------------------| Broker2 TopicA-2(leader) TopicA-0(follower) TopicA-1 -----------------------------------------------------------------------------------|

 

 

2. kafka和Zookeeper之间是如何配合工作

 

3. 性能好在什么地方

kafka:一个支持,高并发,高性能,高可用,可伸缩的消息系统

3.1 kafka的设计,数据其实存储在磁盘上面的

  顺序写:kafka仅仅是追加数据到文件末尾,磁盘顺序写,性能极高

  随机写:随机在文件的某个位置修改数据

3.2 零拷贝

3.3 日志分段存储(log默认是一个G)

  前面三个保证的是高性能

3.4 kafka的网络设计(这个跟调优有关)

  kafka为什么支持高并发,其实很大的一个原因是跟网络这有关系

 

①客户端发送消费者/生产者

②Accepter (把接受的请求封装成socketchannel,轮询发送到Processor)

③kafka默认3个Processor(调优,增大Processor数量)

Processor

  socketchannel socketchannel socketchannel

Processor

  socketchannel socketchannel socketchannel

Processor

  socketchannel socketchannel socketchannel

 

④多个Processor将sockechannel发送到队列,组成Request队列

Request Request Request

 

⑤线程池(解析Request请求,写磁盘或者读磁盘) 调优(增大线程数)

默认8个线程

线程

线程

线程

线程

线程

线程

线程

线程

处理是否完成,响应队列,默认3个队列

线程:response(响应)给Processor

线程:response

线程:response

 

写:顺序写

读:零拷贝

 

 

 

4. 搭建一个kafka集群

5. 如何去评估一个集群的资源

  2,8法则

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-07-13 22:55  起始的地方  阅读(152)  评论(0编辑  收藏  举报