一、选择题

  1. Kafka服务器默认能接收的最大消息是多大? (单选) A

    A:1M

    B:10M

    C:100M

    D:没有大小限制,因为支持大数据

  2.Kafka的特性(多选)  ABCD

    A:高吞吐量、低延迟

    B:可扩展性、持久性、可靠性

    C:容错性

    D:高并发

  3.kafka 容错性说话正确的是 ABCD

    A:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)

    B:杀死集群中的主节点还是可以使用

    C:杀死集群中所有的副节点还是可以使用

    D:无论结束的是主还是副broker,都不会影响kafka使用,只要还有一个副本

  4.zookeeper在kafka中的作用(多选) AC

    A:kafka 将元数据信息维护在zookeeper上

    B:kafka的producer、consumer、topic、partition都需要依赖zookeeper

    C:kafka使用zookeeper来实现动态的集群扩展

    D:发送到topic的数据需要经过zookeeper

  5.Kafka相对传统技术有什么优势说法正确的是 ABCD

    A:快速:单一的Kafka代理可以处理成千上万的客户端,每秒处理数兆字节的读写操作。

    B:可伸缩:在一组机器上对数据进行分区和简化,以支持更大的数据

    C:持久:消息是持久性的,并在集群中进行复制,以防止数据丢失。

    D:设计:它提供了容错保证和持久性

  6.Kafka负载均衡原理说法正确的是 ABCD

    A: producer根据用户指定的算法,将消息发送到指定的partition

    B:存在多个partiiton,每个partition有自己的replica,每个replica分布在不同的Broker节点上

    C:多个partition需要选取出lead partition,lead partition负责读写,并由zookeeper负责fail over

    D:通过zookeeper管理broker与consumer的动态加入与离开

  7.关于partition中的数据是如何保持到硬盘上的,说法正确的是 ABC

    A:一个topic分为好几个partition,每一个partition是以文件夹的形式保持在broker节点上面的

    B:每一个分区的命名是从序号0开始递增

    C:每一个partition目录下多个segment文件(包含xx.index,xx.log),默认是1G

    D:每个分区里面的消息是有序的,数据是一样的

二、判断题

  1.一个topic有多个partition,消息会存在leader的partition中,其他partition同步leader的数据?   错

  2.kafka 支持热扩展,及扩及用             对

  3.kafka有可能在生产消息后发生消息偏移             错

  4.就算首选副本不在ISR中,controller也能将leadership转到首选副本            错

三、练习题(需要自己动手)

  1.搭建并启动一个3个节点的kafka集群,并配置使用3个节点的zookeeper集群。

  2.在搭建的 kafak 集群中创建一个 test 的 topic,指定三个分区三个副本。再次上学会 kafka 的容错扩容等知识点。

  3.自定义一个 producer 拦截器,在消息之前加上“网易云课堂”。

  4.尝试自己一个 stream 例子。

  5.运行 kafka manager 监控工具,尝试在 web 端去去分区副本迁移。

四、综合题

  1. 为什么要使用消息队列或 kafka

    缓冲和削峰:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中,下游服务就可以按照自己的节奏进行慢慢处理。

    解耦和扩展性:项目开始的时候,并不能确定具体需求。消息队列可以作为一个接口层,解耦重要的业务流程。只需要遵守约定,针对数据编程即可获取扩展能力。

    冗余:可以采用一对多的方式,一个生产者发布消息,可以被多个订阅topic的服务消费到,供多个毫无关联的业务使用。

    健壮性:消息队列可以堆积请求,所以消费端业务即使短时间死掉,也不会影响主要业务的正常进行。

    异步通信:很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。

  2.kafka中的broker 是干什么的?

    broker 是消息的代理,Producers往Brokers里面的指定Topic中写消息,Consumers从Brokers里面拉取指定Topic的消息,然后进行业务处理,broker在中间起到一个代理保存消息的中转站。

  3.kafka中的 zookeeper 起到什么作用,可以不用zookeeper么

    zookeeper 是一个分布式的协调组件,早期版本的kafka用zk做meta信息存储,consumer的消费状态,group的管理以及 offset的值。考虑到zk本身的一些因素以及整个架构较大概率存在单点问题,新版本中逐渐弱化了zookeeper的作用。新的consumer使用了kafka内部的group coordination协议,也减少了对zookeeper的依赖,

    但是broker依然依赖于ZK,zookeeper 在kafka中还用来选举controller 和 检测broker是否存活等等。

  4.kafka follower如何与leader同步数据?

    Kafka的复制机制既不是完全的同步复制,也不是单纯的异步复制。完全同步复制要求All Alive Follower都复制完,这条消息才会被认为commit,这种复制方式极大的影响了吞吐率。而异步复制方式下,Follower异步的从Leader复制数据,数据只要被Leader写入log就被认为已经commit,这种情况下,如果leader挂掉,会丢失数据,kafka使用ISR的方式很好的均衡了确保数据不丢失以及吞吐率。Follower可以批量的从Leader复制数据,而且Leader充分利用磁盘顺序读以及send file(zero copy)机制,这样极大的提高复制性能,内部批量写磁盘,大幅减少了Follower与Leader的消息量差。

  5.什么情况下一个 broker 会从 isr中踢出去?

    leader会维护一个与其基本保持同步的Replica列表,该列表称为ISR(in-sync Replica),每个Partition都会有一个ISR,而且是由leader动态维护 ,如果一个follower比一个leader落后太多,或者超过一定时间未发起数据复制请求,则leader将其重ISR中移除。

  6.kafka 比其他消息系统快的原因?

    Cache Filesystem Cache PageCache缓存

    顺序写 由于现代的操作系统提供了预读和写技术,磁盘的顺序写大多数情况下比随机写内存还要快。

    Zero-copy 零拷⻉技术减少拷贝次数

    Batching of Messages 批量量处理。合并小的请求,然后以流的方式进行交互,直顶网络上限。

    Pull 拉模式 使用拉模式进行消息的获取消费,与消费端处理能力相符。

  7.kafka producer如何优化打入速度?

    l  增加线程

    l  提高 batch.size

    l  增加更多 producer 实例

    l  增加 partition 数

    l  设置 acks=-1 时,如果延迟增大:可以增大 num.replica.fetchers(follower 同步数据的线程数)来调解;

    l  跨数据中心的传输:增加 socket 缓冲区设置以及 OS tcp 缓冲区设置。

  8.kafka producer 打数据,ack  为 0, 1, -1 的时候代表啥, 设置 -1 的时候,什么情况下,leader 会认为一条消息 commit了?

    1(默认)  数据发送到Kafka后,经过leader成功接收消息的的确认,就算是发送成功了。在这种情况下,如果leader宕机了,则会丢失数据。

    0 生产者将数据发送出去就不管了,不去等待任何返回。这种情况下数据传输效率最高,但是数据可靠性确是最低的。

     -1 producer需要等待ISR中的所有follower都确认接收到数据后才算一次发送完成,可靠性最高。

    当ISR中所有Replica都向Leader发送ACK时,leader才commit,这时候producer才能认为一个请求中的消息都commit了。

  9.kafka  unclean 配置代表啥,会对 spark streaming 消费有什么影响?

    unclean.leader.election.enable 为true的话,意味着非ISR集合的broker 也可以参与选举,这样有可能就会丢数据,spark streaming在消费过程中拿到的 end offset 会突然变小,导致 spark streaming job挂掉。如果unclean.leader.election.enable参数设置为true,就有可能发生数据丢失和数据不一致的情况,Kafka的可靠性就会降低;而如果unclean.leader.election.enable参数设置为false,Kafka的可用性就会降低。

  10.如果leader crash时,ISR为空怎么办?

    kafka在Broker端提供了一个配置参数:unclean.leader.election,这个参数有两个值:

    true(默认):允许不同步副本成为leader,由于不同步副本的消息较为滞后,此时成为leader,可能会出现消息不一致的情况。

    false:不允许不同步副本成为leader,此时如果发生ISR列表为空,会一直等待旧leader恢复,降低了可用性。

  

  11.kafka的message格式是什么样的?

    一个Kafka的Message由一个固定长度的header和一个变长的消息体body组成

    header部分由一个字节的magic(文件格式)和四个字节的CRC32(用于判断body消息体是否正常)构成。

    当magic的值为1的时候,会在magic和crc32之间多一个字节的数据:attributes(保存一些相关属性,

    比如是否压缩、压缩格式等等);如果magic的值为0,那么不存在attributes属性

    body是由N个字节构成的一个消息体,包含了具体的key/value消息

  

  12.kafka中consumer group 是什么概念

    同样是逻辑上的概念,是Kafka实现单播和广播两种消息模型的手段。同一个topic的数据,会广播给不同的group;同一个group中的worker,只有一个worker能拿到这个数据。换句话说,对于同一个topic,每个group都可以拿到同样的所有数据,但是数据进入group后只能被其中的一个worker消费。group内的worker可以使用多线程或多进程来实现,也可以将进程分散在多台机器上,worker的数量通常不超过partition的数量,且二者最好保持整数倍关系,因为Kafka在设计时假定了一个partition只能被一个worker消费(同一group内)。

Kafka 练习题的更多相关文章

  1. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  2. 消息队列 Kafka 的基本知识及 .NET Core 客户端

    前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...

  3. kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...

  4. .net windows Kafka 安装与使用入门(入门笔记)

    完整解决方案请参考: Setting Up and Running Apache Kafka on Windows OS   在环境搭建过程中遇到两个问题,在这里先列出来,以方便查询: 1. \Jav ...

  5. kafka配置与使用实例

    kafka作为消息队列,在与netty.多线程配合使用时,可以达到高效的消息队列

  6. kafka源码分析之一server启动分析

    0. 关键概念 关键概念 Concepts Function Topic 用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. Partition 是Kafka中横向扩展和一 ...

  7. Kafka副本管理—— 为何去掉replica.lag.max.messages参数

    今天查看Kafka 0.10.0的官方文档,发现了这样一句话:Configuration parameter replica.lag.max.messages was removed. Partiti ...

  8. Kafka:主要参数详解(转)

    原文地址:http://kafka.apache.org/documentation.html ############################# System ############### ...

  9. kafka

    2016-11-13  20:48:43 简单说明什么是kafka? Apache kafka是消息中间件的一种,我发现很多人不知道消息中间件是什么,在开始学习之前,我这边就先简单的解释一下什么是消息 ...

随机推荐

  1. 备份Ubuntu系统

    1.工具:再生龙 2.备份方法:使用再生龙将系统备份(在U盘/boot目录下有很多文件),可以通过这个U盘去装机.将这个U盘生成的文件发送给应用,应用会将其打包生成iso可发布版本: 3.操作步骤:

  2. L2-005. 集合相似度(set使用)

    L2-005. 集合相似度 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定两个整数集合,它们的相似度定义为:Nc/Nt*1 ...

  3. spring学习十三

    1: RESTful URL : 域和端口 / servlet / 资源 / 参数id 2:  静态资源访问处理? 采用RESTful架构后,需要将web.xml中控制器拦截的请求设置为/,这样会将c ...

  4. git学习4 常用命令

    1:更新: 更新后,更新只在Workspace中,没有到暂存区.git status可以查看当前状态. git add <file>  可以放到待提交区.      git  checko ...

  5. linux 学习2 常用命令

    1.显示日期的指令: date 2.   [Tab]按键---具有『命令补全』不『档案补齐』的功能 3:  su和 sudo  su用于用户之间的切换.  su在不加任何参数,默认为切换到root用户 ...

  6. taskkill /f /t /im processName

    /*@echo off */taskkill /f /t /im WINWORD.exetaskkill /f /t /im nginx.exetaskkill /f /t /im w3wp.exet ...

  7. 类型:。net;问题:HQL;结果:HQL: Hibernate查询语言

    HQL: Hibernate查询语言 Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL.但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可 ...

  8. Git中远程仓库的使用

    1.查看当前的远程库 要查看当前配置有哪些远程仓库,可以用 git remote 命令,它会列出每个远程库的简短名字.在克隆完某个项目后,至少可以看到一个名为 origin 的远程库,Git 默认使用 ...

  9. DAY9-python并发之多进程理论

    一.背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所 ...

  10. sea.js的模块化开发

    为什么使用sea.js? Sea.js 追求简单.自然的代码书写和组织方式,具有以下核心特性: 简单友好的模块定义规范:Sea.js 遵循 CMD 规范,可以像Node.js 一般书写模块代码. 自然 ...