甲骨文认证体系
Vmware认证体系
AWS亚马逊
阿里云认证体系
红帽认证体系
ZStack云计算认证体系
思科认证体系
华为认证体系
CDA数据分析师认证
达梦认证体系
麒麟
定制化课程
关于kafka的相关特性
发布日期:2020-03-26 11:40:08阅读次数:

最近在准备大数据HCIE的面试过程当中,在准备的时候总结一下每个组件的相关特性。
首先简单介绍一下kafka:
Kafka是一个高吞吐、分布式、基于发布订阅的消息系统。它最初由LinkedIn公司开发,使用Scala语言编写,之后成为Apache项目的一部分。Kafka是一个分布式的、可划分的、多订阅者、冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。

它的集群结构如下:

kafka的相关特性:
这里对与kafka的基础内容就不重复了,我想总结一下之前没注意的部分。

1.broker之间的关系是什么?
broker之间的关系地位是平等的,支持水平扩展。
如果有新增的broker首先会向zookeeper进行注册,然后通知producer 和consumer

2.关于同步与异步:
在上面的结构图中也能很清晰明显的看到生产和接受消息的方式是不同的,producer在生产消息的时候,使用的是push;而consumer在获取消息是使用的是pull。
producer --push:
同步生成者----先写入分区,再告诉consumer -->这种方式速度慢
这个生产者写一条消息的时候,它就立马发送到某个分区去。follower还需要从leader拉取消息到本地,follower再向leader发送确认,leader再向客户端发送确认。由于这一套流程之后,客户端才能得到确认, 所以很慢。

consumer–pull:
异步生产者----缓存区里面就告诉consumer—>速度很快,但是不一定能保证数据都被接收到
这个生产者写一条消息的时候,先是写到某个缓冲区,这个缓冲区里的数据还没写到broker集群里的某个分区的时候,它就返回到client去了。虽然效率快,但是不能保证消息一定被发送出去了。

3.kafka中能不能同时有多个consumer对topic进行消费?如何进行消费?
当然是可以的,消费者组之间是相互独立的,消费者组的内部负载分担的topic消息会广播的发送给所有的consumer

腾科教育

4.关于consumer-group:
各个consumer组成一个组,每个消息只能被一个consumer消费;
如果一个消息想要被多个消费者消费的话,那么这些消费者必须在不同的组。
kafka的设计原理,对于一个topic,同一个consumer-group不能多于partitions个数的consumer同时消费在小组中,consumer消费消息是相互独立的

5.leader 和follower:
正常工作的时候leader 和follower 如何同步数据?
正本leader—副本follower正常情况下读写数据全部和leader进行交互的
follower主动线程(RFT)去leader 批量拉取消息

如果说leader 出现问题了,会进行什么操作?
follower会去进行管理。
从follower中选取一个新的leader去接管工作

leader 和follower 如何分布的?
leader承载了所有读写请求,集群处于整体的考虑会将leader 分散在每个实例上,确保整体的稳定性

6.partition, replication ,leader:
一个topic 写入到几个partitions中?
这是用户自己设置的,通常是2个
注意:partition的数目决定了broker的个数

partition 如何存储数据?
最终存储到log日志

对数据进行分区之后有什么好处?
这里有一个操作是回滚的操作,它是将大文件变成小的文件进行存储
有一个好处就是会定期删除

7.zookeeper在kafka中的作用:
zookeeper在kafka中的作用需要分版本讨论
高版本兼容低版本新版本(0.9版本)kafka不强依赖与zookeeper
老版本中:broker信息、partition的副本信息、消费者的消费信息依赖zookeeper存储元数据

8.可以对kafka上的数据重复读取吗?怎么才能避免重复读取?
当然是可以的。
将发送模式调为最多一次就可以避免重复


腾科教育