一. kafka版本
- Apache Kafka
1.1 仅仅提供最最基础的组件
1.2 只提供一种读写磁盘文件的连接器(Kafka Connection)
1.3 无监控框架
1.4 迭代快
1.5 监控:
1.5.1 kafka manager,
1.5.2 kafka eagle,
1.5.3 JMXTrans+InfluxDB+Grafana - Confluent Kafka
2.1 Schema注册中心(集中管理Kafka消息格式以实现数据前向/后向兼容)
2.2 REST proxy(提供Http接口方式通过网络访问kafka的各种功能)
2.3 支持更多的连接器
2.4 支持跨数据中心备份和集群监控
2.5 缺点: 资料较少 - CDH/HDP Kafka
3.1 支持交互界面和监控界面
3.2 缺点:滞后性
二.Kafka版本命名
- 0.7版本
上古版本 - 0.8版本
2.1 副本机制,可以较好支持消息无丢失。
2.2 Kafka成为真正意义上的分布式高可靠消息队列解决方案。
2.3 指定Zookeeper地址,0.8.2.0之后社区版kafka引入新版Producer API,需要指定Broker地址的Producer
2.4 生产者API默认使用同步方式发送消息,吞吐量低
2.5 异步方式,实际场景会造成消息丢失 - 0.9版本
3.1 新版本Producer API较稳定
3.2 Consumer API 问题多。
3.3 新增安全认证和权限功能
3.4 引入Kafka Connection 组件实现高性能数据抽取 - 0.10.0.0版本
4.1 引入Kafka Streams,升级为分布式流处理平台,但基本不能使用
4.2 4.2 0.10.2.2版本,Producer 性能提升 - 0.11.0.0版本
5.1 提供幂等性Producer API以及事务(Transaction)API,流处理结果正确性的及时
5.2 对Kafka 消息格式做了重构,修复由于格式变更引起消息格式转换而导致的性能问题 0.11.0.3版本的消息引擎功能较完善
尽量保持客户端和服务器版本一致。
三. kafka线上部署方案
1. IO模型方面:
io模型分类:
- 阻塞式I/O
- 非阻塞式I/O
- I/O多路复用
- 信号驱动I/O
- 异步I/O
I/O模型使用场景:
- java Socket对象的阻塞模式: 采用1
- java Socket对象的非阻塞模式:采用2
- Linux系统调用select函数:采用3
4.epoll系统调用:采用3,4之间
5.windows IOCP线程模型: 采用5
Kafka 客户端底层使用了Java的selector,selector在Linux上的实现机制是epoll,在Windows平台上的实现机制是select。
Kafka部署在Linux上有优势,可以获得更高效的I/O性能。
Kafka消息传递方式:
- 通过网络传输。
- 消息保存: 磁盘
- 需要在磁盘和网络间进行大量数据传输
- Linux支持零拷贝技术:
数据在磁盘和网络间传输时,避免昂贵的内核态数据拷贝从而实现快速的数据传输.
2. 磁盘:
2.1 追求性价,使用普通磁盘组成存储空间即可
2.2 使用机器键盘可能胜任kafka线上环境
RAID
1.1 提供冗余的磁盘存储空间
1.2 提供负载均衡机器磁盘
2.1 随机读写操作慢
2.2 易损坏kafka
3.1 实现了冗余机制提高高可靠性,可以弥补机器键盘的不足
3.2 分区的概念,可以在软件层面实现负载均衡
3.3 使用方式多是顺序读写
3.磁盘容量:
- 磁盘需要存储的内容
1.1 数据
1.2 索引数据 约为数据的10%
1.3 压缩比:真正的数据大小是 (数据+索引数据)*压缩比
1.4 实际应用中建议预留20%~30%的磁盘空间 - 需要考虑的因素
2.1 新增消息数
2.2 消息留存时间
2.3 平均消息大小
2.4 备份数
2.5 是否启用压缩
4.带宽
kafka通过网络大量进行传输,带宽易成瓶颈。
可通过部署多台服务器解决。
预估方法:
- 根据实际带宽资源和业务SLA预估服务器数量
- 对于千兆网,建议每台服务器按照700Mbps计算,避免大流量下的丢包
四. 集群配置
Broker参数
- log.dirs: 指定Broker需要使用的若干个文件目录路径,无默认值。举例:/home/kafka,/home/kafka1
- log.dir : 单个路径
最好可以挂载到不同的物理磁盘上:
1.提升读写性能,多块物理磁盘同时写数据有更高的吞吐量
2.能够实现故障转移,即Failover,1.1 版本之前,Kafka Broker使用的任何一块磁盘挂了,整个Broker进程会关闭。1.1之后,坏掉的磁盘上的数据会自动转移到其他正常的磁盘上,Broker还可以正常工作。
是舍弃RAID方案的基础,没有Failover,只能依靠RAID提供保障。 - zookeeper.connect
zookeeper 是一个分布式协调框架。
功能: 负责协调管理并保存Kafka集群的所有元数据信息
包括:
1.集群中Broker运行情况
2. Topic
3. 每个Topic的分区数
4. 分区的Leader副本所在的机器
学习笔记:
极客时间版权所有: https://time.geekbang.org/column/article/101171