kafka

聊一聊Kafka架构核心原理

2019-03-16  本文已影响0人  longxingxiu

本文目录

 
 
 
 

image

对于kafka的架构原理我们先提出几个问题?

  • 一个Topic可以由一个或者多个分区组成,分区可以实现分布式存储,在Kafka集群中分布式存储消息,方便横向扩展.
  • 一个分区由一个或者多个segment组成

(简单回答开篇问题)

Kafka架构图

image

1.kafka名词解释

在一套kafka架构中有多个Producer,多个Broker,多个Consumer,每个Producer可以对应多个Topic,每个Consumer只能对应一个ConsumerGroup。

整个Kafka架构对应一个ZK集群,通过ZK管理集群配置,选举Leader,以及在consumer group发生变化时进行rebalance。

名称解释

Broker

消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群。

Topic

主题,Kafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic。

Producer

消息生产者,向Broker发送消息的客户端。

Consumer

消息消费者,从Broker读取消息的客户端。

ConsumerGroup(实现单播和广播,以及再均衡)

每个Consumer属于一个特定的Consumer Group,一条消息可以发送到多个不同的Consumer Group,但是一个Consumer Group中只能有一个Consumer能够消费该消息。

Partition【为了保序,必须消息发到同一个分区】

物理上的概念,一个topic可以分为多个partition,\color{red}{每个partition内部是有序的}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++

2.Topic和Partition

创建一个Topic,partion数为2

# edit by mayday 2019-03-16

bin/kafka-topics.sh \
    --create \
    --zookeeper zkserver:2181 \
    --replication-factor 1 \
    --partitions 2 \
    --topic test-topic-2

(单机环境,因此partion全部落到单节点上,持久化文件如下)

image.png image

在上图中在我们的\color{red}{生产者会决定发送到哪个Partition}

3.消费模型

4.网络模型

4.1 KafkaClient --单线程Selector

image

单线程模式适用于并发链接数小,逻辑简单,数据量小。

在kafka中,consumer和producer都是使用的上面的单线程模式。这种模式不适合kafka的服务端,在服务端中请求处理过程比较复杂,会造成线程阻塞,一旦出现后续请求就会无法处理,会造成大量请求超时,引起雪崩。而在服务器中应该充分利用多线程来处理执行逻辑。

4.2 Kafka--server -- 多线程Selector

image

在kafka服务端采用的是多线程的Selector模型,Acceptor运行在一个单独的线程中,对于读取操作的线程池中的线程都会在selector注册read事件,负责服务端读取请求的逻辑。成功读取后,将请求放入message queue共享队列中。然后在写线程池中,取出这个请求,对其进行逻辑处理,即使某个请求线程阻塞了,还有后续的县城从消息队列中获取请求并进行处理,在写线程中处理完逻辑处理,由于注册了OP_WIRTE事件,所以还需要对其发送响应。

5.高可靠分布式存储模型

在Kafka中保证高可靠模型的依靠的是副本机制,有了副本机制之后,就算机器宕机也不会发生数据丢失。

5.1高性能的日志存储

image.png image.png

可以思考一下:

1.为什么需要分区,也就是说主题只有一个分区,难道不行吗?2.日志为什么需要分段

5.2 副本机制

image

这里先要说下两个名词:HW(高水位)是consumer能够看到的此partition的位置,LEO是每个partition的log最后一条Message的位置。HW能保证leader所在的broker失效,该消息仍然可以从新选举的leader中获取,不会造成消息丢失。

当producer向leader发送数据时,可以通过request.required.acks参数来设置数据可靠性的级别:(有点像RabbitM生产者的事务机制或者Confirm机制)

参考或者摘抄文章:
1、 阿里大牛实战归纳Kafka架构原理

上一篇下一篇

猜你喜欢

热点阅读