2019大厂面试真题之消息中间件—kafka

kafka:
1.消息分类按不同类别,分成不同的Topic,Topic⼜拆分成多个
partition,每个partition均衡分散到不同的服务器(提⾼并发访问的能⼒)
2.消费者按顺序从partition中读取,不⽀持随机读取数据,但可通过改变保
存到zookeeper中的offset位置实现从任意位置开始读取
3.服务器消息定时清除(不管有没有消费)
4.每个partition还可以设置备份到其他服务器上的个数以保证数据的可⽤
性。通过Leader,Follower⽅式
5.zookeeper保存kafka服务器和客户端的所有状态信息.
(确保实际的客户端和服务器轻量级)
6.在kafka中,⼀个partition中的消息只会被group中的⼀个consumer消
费;每个group中consumer消息消费互相独⽴;我们可以认为⼀个group是⼀ 个"订阅"者,⼀个Topic中的每个partions,只会被⼀个"订阅者"中的⼀个consumer消费,不过⼀个consumer可以消费多个partitions中的消息
7.如果所有的consumer都具有相同的group,这种情况和queue模式很像;
消息将会在consumers之间负载均衡。
8.如果所有的consumer都具有不同的group,那这就是"发布-订阅";消息将
会⼴播给所有的消费者。
9.持久性,当收到的消息时先buffer起来,等到了⼀定的阀值再写⼊磁盘⽂件,减少磁盘IO.在⼀定程度上依赖OS的⽂件系统(对⽂件系统本身优化⼏乎不可能)
10.除了磁盘IO,还应考虑⽹络IO,批量对消息发送和接收,并对消息进⾏压
缩。
11.在JMS实现中,Topic模型基于push⽅式,即broker将消息推送给
consumer端。
不过在kafka中,采⽤了pull⽅式,即consumer在和broker建⽴连接之后,主动去pull(或者说fetch)消息;这种模式有些优点,⾸先consumer端可以根据⾃⼰的消费能⼒适时的去fetch消息并处理,且可以控制消息消费的进度(offset);此外,消费者可以良好的控制消息消费的数量,batch fetch.
12.kafka⽆需记录消息是否接收成功,是否要重新发送等,所以kafka的
producer是⾮常轻量级的,consumer端也只需要将fetch后的offset位置注册到zookeeper,所以也是⾮常轻量级的。
–kafka使⽤场景对于⼀些常规的消息系统,kafka是个不错的选择;partitons/replication和容错,可以使kafka具有良好的扩展性和性能优
势。
不过到⽬前为⽌,我们应该很清楚认识到,kafka并没有提供JMS中的"事务性""
消息传输担保(消息确认机制)"“消息分组"等企业级特性;
kafka只能使⽤作为"常规"的消息系统,在⼀定程度上,尚未确保消息的发送与接收绝对可靠(⽐如,消息重发,消息发送丢失等) kafka的特性决定它⾮常适合作为
“⽇志收集中⼼”;application可以将操作⽇志"批量”"异步"的发送到kafka集群中, ⽽不是保存在本地或者DB中;kafka可以批量提交消息/压缩消息等,这对
producer端⽽⾔,⼏乎感觉不到性能的开⽀。
consumer端采⽤批量fetch⽅式,此时consumer端也可以使hadoop等其他
系统化的存储和分析系统
kafka和RabbitMQ区别:
1、RabbitMQ,遵循AMQP协议,由内在⾼并发的erlanng语⾔开发,⽤在实
时的对可靠性要求⽐较⾼的消息传递上(有消息确认机制)。
2、kafka是Linkedin于2010年12⽉份开源的消息发布订阅系统,它主要⽤
于处理活跃的流式数据,⼤数据量的数据处理上(⽆消息确认机制,但吞吐量⾼),
kafka⽤zk做集群负载均衡。
项⽬中哪⾥⽤到了kafka,它有什么特性?
a. 场景:
i. ⼤数据部⻔流数据处理;
ii. elk;
b. 特性:
i. 它被设计为⼀个分布式系统,易于向外扩展;
ii. 它同时为发布和订阅提供⾼吞吐量;
iii. 它⽀持多订阅者,当失败时能⾃动平衡消费者;
iv. 它将消息持久化到磁盘,因此可⽤于批量消费,例如ETL,以及实时应⽤程序。
kafka数据分区和消费者的关系,kafka的数据offset读取流程,kafka内
部如何保证顺序,结合外部组件如何保证消费者的顺序?
1、kafka数据分区和消费者的关系:1个partition只能被同组的⼀个 consumer消费,同组的consumer则起到均衡效果
2、kafka的数据offset读取流程 ​
1)连接ZK集群,从ZK中拿到对应topic的partition信息和partition
的Leader的相关信息 ​
2)连接到对应Leader对应的broker ​
3)consumer将⾃⼰保存的offset发送给Leader ​
4)Leader根据offset等信息定位到segment(索引⽂件和⽇志⽂件) ​
5)根据索引⽂件中的内容,定位到⽇志⽂件中该偏移量对应的开始
位置读取相应⻓度的数据并返回给consumer
3、kafka内部如何保证顺序:
kafka只能保证partition内是有序的,但是partition间的有序是没办
法的。爱奇艺的搜索架构,是从业务上把需要有序的打到同⼀个 partition。
kafka⼯作流程?
Apache Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开
发,之后成为Apache项⽬的⼀部分。Kafka是⼀种快速、可扩展的、设计内在就 是分布式的,分区的和可复制的提交⽇志服务。
a. ⽣产者定期向主题发送消息。
b. Kafka代理存储为该特定主题配置的分区中的所有消息。 它确保消息
在分区之间平等共享。 如果⽣产者发送两个消息并且有两个分区,
Kafka将在第⼀分区中存储⼀个消息,在第⼆分区中存储第⼆消息。
c. 消费者订阅特定主题。
d. ⼀旦消费者订阅主题,Kafka将向消费者提供主题的当前偏移,并且
还将偏移保存在Zookeeper系综中。
e. 消费者将定期请求Kafka(如100 Ms)新消息。
f. ⼀旦Kafka收到来⾃⽣产者的消息,它将这些消息转发给消费者。
g. 消费者将收到消息并进⾏处理。
h. ⼀旦消息被处理,消费者将向Kafka代理发送确认。
i. ⼀旦Kafka收到确认,它将偏移更改为新值,并在Zookeeper中更新
它。 由于偏移在Zookeeper中维护,消费者可以正确地读取下
⼀封邮件,即使在服务器暴⼒期间。
j. 以上流程将重复,直到消费者停⽌请求。
k. 消费者可以随时回退/跳到所需的主题偏移量,并阅读所有后续
题目来源主要有网友提供,如文中有误,欢迎大家批评指正。
欢迎大家加入互动小天地,获取更多资料分享,向架构师进阶。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值