kafka实战读书笔记

1、katka_2.12-l.0.0.tgz
上面两个文件中的 2.11 /2.12 分别表示编译 Kafka 的 Scala 语言版本,后面的 1.0 .0 是 Kafka的版本

2、kafka的好多脚本,如kafka-console-producer.sh  如果不加任何参数直接运行它们,则会打印它们各自的使用帮助文档 

3、Kafka 的消息是用进制方式来保存的,但依然是结构化的消息
4、最常见的两种消息引擎范型是消息队列模型和发布/订阅模型
消息队列模型:
旦消息被消费( consumed ),就会从队列中移除该消息 每条消息由个发送者生出来,且只被个消费者( consumer)处理一发送者和消费
者之间是的关系

5、吞吐量/延时  是一对矛盾体
6、kafka只是把数据写入到操作系统的页缓存( page cache )中,然后由操作系统自行决定什么时候把页缓存中的数据写回磁盘上
7、事实上普通 SAS 磁盘随机读/写的吞吐量的确是很慢的,但是磁盘的顺序读/写操作其实是非常快的
8、只能在日志文件末尾追加写入新的消息,且不允许修改己写入的消息,因此kafka属于典型的磁盘顺序访问型操作
9、Kafka 在读取消息时会首先尝试从 OS的页缓存中读取,如果命中便把消息经页缓存直接发送到网络的 Socket 上
10、

11、每台 Kafka 服务器上的状态统一交由 ZooKeeper 保管 Kafka 服务器上并不是所有状态都不保存,它只保存了很轻量级的内部状态
12、Kafka 服务器有个官方名字: broker
13、Key:消息键,对消息做 partition 时使用,即决定消息被保存在某 topic 下的哪个 partition
14、follower replica 是不能提供服务给客户端的,也就是说不负 责响应客户端发来的消息写入和消息消费请求。
15、Kafka 保证同 个 partition 的多个 replica 一定不会分配在同一台 broker 上
16、ISR 的全称是 in-sync replica,翻译过来就是与 leader replica 保持同步的 replica 集合 。因为各种各样的原因,一小部分 replica 开始落后于 leader replica 的进度

当滞后 一定程度 时, Kafka 会将这些 replica “踢”出 ISR 。replica 重新“追上”了 leader 的进度时 那么 Kafka 会将它们加 回到 ISR
17、Kafka 的服务器端代码是由 Scala 语言编写的,而新版本客户端代码是由 Java语言编写的
18、因为 Kafka 是顺序写磁盘的,而磁盘顺序 VO 的性能,即使机械硬盘也是不弱的一一顺序 1/0 不需要频繁地移动磁头,因而节省了耗时的寻道时间
19、推荐用户为每个 broker 都配置多个日志路径,每个路径都独立挂载在不同的磁盘上,这使得多块物理磁盘磁头同时执行物理 I/O 写操作,可以极大地加速 Kafka 消息生产的速度。
20、磁盘容量计算

21、假设单个日志段文件大小设置为 lOGB,那么你至少应该给予 page cache 1OGB 以上的内存空间 。这样,待消费的消息有很大概率会保存在页缓存中
22、内存规划

23、Kafka 不属于计算密 集型( CPU-bound )的系统,因此对于 CPU 需要记住一点就可以了:追求多核而非高时钟频率

Kafka 的机器有 16 个 CPU 核这件事情比该机器 CPU 时钟高达 4GHz 更加重要,因为 Kafka 可能无法充分利用这 4GHz 的频率,但几乎肯定会用满 16 个 CPU 核。
24、宽主要也有两种: lGb/s 和 lOGb/s,即平时所说的千兆位网络和万兆位网络
25、根据业务量和带宽计算需要几台broker

26、单节点伪分布式环境是指集群由一台 ZooKeeper 服务器和一台 Kafka broker 服务器组成

      多节点 Kafka 集群由一套多节点 ZooKeeper 集群和一套多节点 Kafka 集群组成
27、安装java

28、启动kafka

29、最好使用奇数个服务器,即 2n + 1 个服务器,这样整个 ZooKeeper 集群最多可以容忍 n 台服务器容机而保证依然提供服务 。假如我们使用了 4
台服务器,若 2 台服务器岩机,剩下的 2 台服务器不满足“半数以上服务器存活”的条件,因此此时 ZooKeeper 集群将停止服务
30、zookeeper关键参数

myid 文件位于 zoo.cf运中 dataDir 配置的目录下,其内容也很简单,仅是一个数字,即 ID 。

31、一台机器上的三台zookeeper

32、查看集群状态

33、ZooKeeper 的主进程名是 QuorumPeerMain

34、一台机器上启动三个kafka

在上面 3 个配置文件中我们需要每台 Kafka 服务器指定不同的 broker ID 该由在整个集群中必须是唯

35、topic删除是个异步过程,执行 kafka-topics 脚本来列出当前的 topic 列表,如果 test-topic 不在该列表中,则表明该 topic 被删除成功
36、Kafka 还提供了性能吞吐量测试脚本,它们分别是 katka-producer-perf-test 脚本和 katkaconsumer-perf-test 脚本
37、生产者吞吐量测试

38、消费者吞吐量测试

39、当前对于绝大多数的 broker 端参数而言, 尚不支持动态修改一一这就是说,如果要新增、修改,抑或是删除某些 broker 参数的话,需要重启对应的 broker 服务器。
1)、log.dirs一一-非常重要的参数!该参数指定了 Kafka 持久化消息的目录 。该参数可以设置多个目录,以逗号分隔,比如/home/kafkal ,/home/kafka2
2)、如果要使用 套 ZooKeeper环境管理多套 Kafka 集群,那么设置该参数的时候就必须指定 ZooKeeper 的 chroot,比如 zkl :218 l ,zk2:2181,zk3:2181/kafka_clusterl o 结尾的/kafka_cluster 1 就是 chroot,它
是可选的配置,如果不指定则默认使用 ZooKeeper 的根路径
3)、listeners一-broker 监听器的 csv 列表,格式是[协议]://主机名 ]:[端口],[[协议]]://主机名]:[端口]]。该参数主要用于客户端连接 broker 使用,

可以认为是 broker 端开放给 clients的监听端口 如果不指定主机名,则表示绑定默认网卡:如果机名是 0.0.0.0,则表示绑定所有网卡
4)、advertised.listeners一一与 listeners 类似,该参数也是用于发布给 clients 的监听器,不过该参数主要用于 IaaS 环境,比如云上的机器通常都配有多块网卡(私网网卡和公网网
卡)。对于这种机器,用户可以设置该参数绑定公网 IP 供外部 clients 使用,然后配置上面的 listeners 来绑定私网 IP 供 broker 间通信使用在实际使用场景中,对于配有多块网
卡的机器而言,这个参数通常都是需要配置的
5)、unclean.leader.election.enable- 该参数默认值是 false ,即表明如果发生这种情况, Kafka 不允许从剩下存活的非 ISR 副本中选择一个当 leader
6)、log.retention. {hourslminuteslms} 若同时设置,优选ms,minutes次之,hours最后
7)、min.insync.replicas 也只有在 acks=-1 时才有意义

40、Kafka 会频繁地创建井修改文件系统中的文件 ,如果个 broker 上面有很多 topic 的分区,那么这个 broker 势必就需要打开很多个文件一一大致数约等于分区数 × (分区
总大小/日志段大小〉 × 3
41、





































 

原文地址:https://www.cnblogs.com/testzcy/p/10073556.html