(二)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法则
憨