kafka权威指南-第一章问答式学习

最近要阅读kafka权威指南这本书,我决定换一种方法来阅读技术类书籍,通过提问的方法。问题列表如下

1.kafka是什么?

kafka是一种分布式的,基于发布/订阅的消息系统。设计的初衷是处理持续数据流的组件,kafka将数据看成持续变化和不断增长的流,在kafka中可以发布和订阅消息流,并把它们保存起来,进行处理。

kafka像一个消息系统,允许发布和订阅消息流。但是与传统的消息系统又有区别,是一种现代的分布式系统。以集群的方式运行,可以自由伸缩,处理公司的所有应用程序。通常作为数据连接层来使用。

比如下图,各种app, db都可以吧数据发送到kafka cluster平台中,各种app, db也可以从kafka cluster平台中获取数据。
kafka权威指南-第一章问答式学习_第1张图片

2.kafka能干什么?

移动数据,消息队列,消息总线,数据存储平台。

3.为什么使用Kafka?

多个数据源,多个获取端,基于磁盘的数据存储,伸缩性,高性能

4.在哪里使用?

活动跟踪,传递消息,度量指标和日志记录,提交日志,流处理

5.什么是broker?

一个独立的kafka服务器被称为broker。

面向生产者(消息的提供者)的消息,为消息设置偏移量,并提交消息到磁盘保存。
面向消费者(消息的使用者)提供服务,对读取分区的请求做出响应,返回已经提交到磁盘的消息

在集群里面,有一个broker会同时会充当集群控制器的角色(自动选出),复制管理工作,将分区分配给broker和监控broker。

6.什么是多集群?为什么使用多集群?

多集群指的是建立多个kafka集群。
为什么使用多集群呢?数据类型分离,安全需求隔离,多数据中心(灾难恢复)

7.如何能够保证多集群之间的消息复制呢?

mirrorMaker的工具,可以实现集群间的消息复制。

8.如何为主题分区?

在kafka的消息中,是通过主题对消息进行分类的,同时主题还被分为若干个区。
主题就有点类似于文件夹,而分区就是文件。在同一个主题下,不同的分区可以在不同的服务器上,好处是,并行,增加吞吐等等。
消息在分区中是以追加的方式写入分区存储的。

9.如何选定分区数量?

在选定分区的时候(通过配置num.patitions),需要考虑如下几个因素:
1.从主体的角度:主题需要达到多大的吞吐量?比如,希望每秒写入100kb还是1GB?
2.从消费者的角度:单个分区读取数据的最大吞吐量是多少?每一个分区都有一个消费者,如果知道消费者将数据写入数据库的速度不超过50MB/s,那么你也该知道,一个分区读取数据的吞吐量不需要超过每秒50MB
3.从生产者的角度:通过类似的方法估算生产者向当个分区写入数据的吞吐量,不过生产者的速度一般比消费者快,最后为生产者多预估一些吞吐量。
4.每一个broker包含的分区数,可用的磁盘空间和网络带宽。
5.如果消息是按照不同的键写入分区的,那么为已有的主题新增分区就会很困难
6.单个broker对分区个数是有限制的,因为分区越多,占用的内存越多,完成首领选举需要的时间也就越长。
如果不知道上的信息,根据经验,将分区的大小限制在25GB以内能够得到比较理想的效果

10.数据被保存多久?

有如下几种方式:
1. 根据时间来决定数据会保留多久(配置log.retention.ms, log.retention.minites, log.retention.hours)。
2. 根据字节大小决定数据什么时候删除(配置log.retention.bytes)。
日志片段的关闭方式也有两个:
1. 大小,(配置log.segment.bytes)
2. 时间,(配置log.segment.ms)

11.集群中需要使用多少个broker呢?

一个kafka集群需要使用多少个broker取决于以下几个因素:
1. 需要多少磁盘空间来保存数据,是否启用数据复制
2. 集群处理请求的能力。
3. 磁盘吞吐低和系统内存不足造成的性能问题,也可以通过扩展多个broker来解决。

12.操作系统调优

  1. 虚拟内存,内存页和磁盘之间的交换对kafka的各方米昂性能都有重大的影响。kafka大量使用系统页面缓存,如果虚拟内存被交换到磁盘,说明已经没有多余内存可以分批给页面缓存了。一种避免内存交换额方法就是不设置任何交换分区。将vm.swappiness设置的小一些,比如1.
  2. 磁盘,使用EXT4文件系统,防止更新atime,设置noatime
  3. 网络,优化soket读写缓冲区,设置TCP socket的读写缓冲区

13.生成环境中注意事项

  1. 垃圾回收,使用G1回收器,对G1的两个参数:MaxGCPauseMillis(每次垃圾回收默认的停顿时间)和InitiatingHeap0ccupancyPercent(指定在G1启动新一轮垃圾回收之前可以使用的堆内存百分比。
  2. 数据中心布局。最好把集群的broker安装在不同的机架上,最少使用两个电源连接,两个网络交换器。
  3. 共享zookeeper

你可能感兴趣的:(kafka,流式处理,大数据)