一、选择题

  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. 蓝桥杯 基础练习 BASIC-22 FJ的字符串

    基础练习 FJ的字符串   时间限制:1.0s   内存限制:512.0MB 问题描述 FJ在沙盘上写了这样一些字符串: A1 = “A” A2 = “ABA” A3 = “ABACABA” A4 = ...

  2. C++字符集问题终极分析(可解决乱码问题)

    最近研究vc,windows的东西真是很傻瓜,啥都给你做好,有个好处就是开发方便了. 有个弊端就是完全按微软的一套进行,规则都是它定的,你得知道它的很多api, 开发出来的代码效率不高,不过却可以比较 ...

  3. 人脸识别FaceNet+TensorFlow

    一.本文目标 利用facenet源码实现从摄像头读取视频,实时检测并识别视频中的人脸.换句话说:把facenet源码中contributed目录下的real_time_face_recognition ...

  4. 2015.12.14 MDI(多文档窗口结构)设置基本解决,折腾一天,部分解决存在已久的问题。但效果仍不如临时航线的MDI窗体结构。

    创建从一个窗口弹出多个子窗口的结构叫MDI窗体结构 如果不按MDI结构管理,最简单的做法是: 在窗体A上添加菜单或按钮,在菜单或按钮事件中添加弹出B窗体代码: B b = new B(); b.sho ...

  5. suse 源的添加与删除,以及源地址

    地址 一个是上海交大的,http://ftp.sjtu.edu.cn/opensuse/update/ 葡萄牙的: http://ftp.nux.ipb.pt/pub/dists/opensuse/u ...

  6. .Net 使用 GregorianCalendar 获取任意一天为一年的第几周

    private static int GetWeekOfYear(DateTime dt) { GregorianCalendar gc = new GregorianCalendar(); int ...

  7. 问题:asp.net 点击button按钮调到页面顶部;结果:asp.net点击一个按钮,使页面跳转到本面页上的指定位置

    asp.net点击一个按钮,使页面跳转到本面页上的指定位置 (2011-04-19 16:46:51) 转载▼ 标签: it   最近在做一个项目. 用到标题所说的功能. 实现方法: 1.在aspx中 ...

  8. select 动态添加option函数

    转自:https://lym6520.iteye.com/blog/309937 经常会用到select动态添加元素,写了个方法,方便调用!  ... /** * 功能:select对象动态添加Opt ...

  9. JAVA对Excel文件进行操作

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

  10. How to watch property in attrs of directive

    Q: I have a controller that has a counter that changes from time to time. That counter is tied to an ...