2 Kafka原理以及实战演练-各个节点的作用

1Kafka中的节点

在这里插入图片描述

1 broker
Kafka 集群包含一个或多个服务器,服务器节点称为broker。
broker存储topic的数据。如果某topic有N个partition,集群有N个broker,那么每个broker存储该topic的一个partition。

如果某topic有N个partition,集群有(N+M)个broker,那么其中有N个broker存储该topic的一个partition,剩下的M个broker不存储该topic的partition数据。

如果某topic有N个partition,集群中broker数目少于N个,那么一个broker存储该topic的一个或多个partition。在实际生产环境中,尽量避免这种情况的发生,这种情况容易导致Kafka集群数据不均衡。

2 Topic
每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)

类似于数据库的表名

3 Partition
topic中的数据分割为一个或多个partition。每个topic至少有一个partition。每个partition中的数据使用多个segment文件存储。partition中的数据是有序的,不同partition间的数据丢失了数据的顺序。如果topic有多个partition,消费数据时就不能保证数据的顺序。在需要严格保证消息的消费顺序的场景下,需要将partition数目设为1。

4 Producer
生产者即数据的发布者,该角色将消息发布到Kafka的topic中。broker接收到生产者发送的消息后,broker将该消息追加到当前用于追加数据的segment文件中。生产者发送的消息,存储到一个partition中,生产者也可以指定数据存储的partition。

5 Consumer
消费者可以从broker中读取数据。消费者可以消费多个topic中的数据。

6 Consumer Group
每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。这是kafka用来实现一个topic消息的广播(发给所有的consumer)和单播(发给任意一个consumer)的手段。一个topic可以有多个CG。topic的消息会复制-给consumer。如果需要实现广播,只要每个consumer有一个独立的CG就可以了。要实现单播只要所有的consumer在同一个CG。用CG还可以将consumer进行自由的分组而不需要多次发送消息到不同的topic。

7 Leader
每个partition有多个副本,其中有且仅有一个作为Leader,Leader是当前负责数据的读写的partition

8 Follower
Follower跟随Leader,所有写请求都通过Leader路由,数据变更会广播给所有Follower,Follower与Leader保持数据同步。如果Leader失效,则从Follower中选举出一个新的Leader。当Follower与Leader挂掉、卡住或者同步太慢,leader会把这个follower从“in sync replicas”(ISR)列表中删除,重新创建一个Follower。

9 Offset
kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。当然the first offset就是00000000000.kafka

2消息检索的原理

读取数据的过程中,数据是属于某一个topic的某一个partition对应的某一个segment文件中的某一条记录。如何高效找到这条消息,决定着kafka的性能。
在这里插入图片描述
Kafka中数据文件的保存目录,我们可以看到的是这个partition下面有好多组文件,每一组都由一个segment数据文件[.log],一个index索引文件[.index],以及一个timeindex时间戳索引文件[timeindex]构成。

在这里插入图片描述
index文件的序号就是message在日志文件中的相对偏移量,这里的相对偏移量指的是index的相对第一条消息而言的。

3数据的安全性

1Kafka 的消息投递保证(delivery guarantee)机制以及如何实现

Kafka支持三种消息投递语义:
① At most once 消息可能会丢,但绝不会重复传递
② At least one 消息绝不会丢,但可能会重复传递
③ Exactly once 每条消息肯定会被传输一次且仅传输一次,很多时候这是用户想要的
Producer:
在这里插入图片描述
producer 的deliver guarantee 可以通过request.required.acks参数的设置来进行调整:
request.required.acks=0 ,producer生产的一条消息发送完毕,offset立即增加,继续生产,相当于At most once;
request.required.acks=1,leader收到leader 对一个消息的接受ack才增加offset,不管follower,然后继续生产【可能的数据丢失】;
request.required.acks=-1(all),leader收到ISR中leader replica 对一个消息的接受ack才增加offset,然后继续生产【数据重复】;

例如设置为0时,当producer向broker发送消息时,producer消息发送完毕即offset增加,遇到的网络问题而造成通信中断,那么数据没有落到broker,同时producer也不会做补偿操作,因此导致生产方的消息丢失。

Consumer:
在这里插入图片描述

3ISR机制

在这里插入图片描述
在这里插入图片描述

4Broker数据存储机制

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值