kafka

Posted hanchaoyue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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法则

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于kafka的主要内容,如果未能解决你的问题,请参考以下文章

Kafka-文件管理

Flink实战系列Flink 1.14.0 消费 kafka 数据自定义反序列化器

kafkaThe group member needs to have a valid member id before actually entering a consumer group(代码片段

SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介创建消息生产者创建消息消费者自定义消息通道分组与持久化设置 RoutingKey)(代码片段

Camel-Kafka java.io.EOFException - NetworkReceive.readFromReadableChannel

在ansible模板中使用动态组名称