java面试之消息中间件kafka【1】
一些面试常见的kafka问题及解答。如果你的简历里写了用过kafka,那么最好能够了解kafka的原理和常用应用场景,不然就会。。。。
1. kafka由哪些角色组成
(1)Producer 消息生产方
(2)Consumer 消息接收方
(3)Broker 服务器代理节点
2. topic和partition
kafka中还有两个很重要的概念:topic和partition。kafka重的消息以topic为单位进行分类。
Producer将这些消息每条发送到一个特定的topic(每条消息必须制定一个topic)
Consumer负责订阅topic,方便接收
一个topic可以细分为多个partition, 一个partition只能属于一个分区。在存储上,分区完全可以被看作是一个可追加的日志文件,消息被分配到日志分拣的时候,都会分配一个offset,offset是消息在partition中的唯一标识,通过offset可以保证消息在分区内的有序性。
3.说到有序性,请问消息可以实现全局有序吗
不可以
除非
。
。
(1)每个 topic 只设置一个partition
kafka默认保证同一个partition内的消息是有序的,则可以设置topic只使用一个分区,这样消息就是全局有序。但是这样做性能会非常低。
(2)producer将消息发送到指定同一个partition
kafka默认保证同一个partition内的消息是有序的,则producer可以在发送消息时可以指定需要保证顺序的几条消息发送到同一个分区。
4.存储特点
(1)kafka把消息持久化到磁盘,降低了数据丢失的风险
(2)而且还有多副本机制。同一partition有不同副本。不同副本保存的事相同的消息(同一时刻,副本并非完全一样)
副本之间是一主多从的关系,其中leader副本负责处理读写请求,follower副本负责与leader的消息同步。副本处于不同broker中,当leader副本出现故障时,从follower副本中重新选举新的leader副本对外提供服务kafka通过多副本机制实现了故障的自动转移。某个broker失效时仍然可以保证服务可用。
5.zookeeper是干嘛的
负责broker集群元数据的管理和控制器选举