kafka

一. kafka版本

  1. 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
  2. Confluent Kafka
    2.1 Schema注册中心(集中管理Kafka消息格式以实现数据前向/后向兼容)
    2.2 REST proxy(提供Http接口方式通过网络访问kafka的各种功能)
    2.3 支持更多的连接器
    2.4 支持跨数据中心备份和集群监控
    2.5 缺点: 资料较少
  3. CDH/HDP Kafka
    3.1 支持交互界面和监控界面
    3.2 缺点:滞后性

二.Kafka版本命名

  1. 0.7版本
    上古版本
  2. 0.8版本
    2.1 副本机制,可以较好支持消息无丢失。
    2.2 Kafka成为真正意义上的分布式高可靠消息队列解决方案。
    2.3 指定Zookeeper地址,0.8.2.0之后社区版kafka引入新版Producer API,需要指定Broker地址的Producer
    2.4 生产者API默认使用同步方式发送消息,吞吐量低
    2.5 异步方式,实际场景会造成消息丢失
  3. 0.9版本
    3.1 新版本Producer API较稳定
    3.2 Consumer API 问题多。
    3.3 新增安全认证和权限功能
    3.4 引入Kafka Connection 组件实现高性能数据抽取
  4. 0.10.0.0版本
    4.1 引入Kafka Streams,升级为分布式流处理平台,但基本不能使用
    4.2 4.2 0.10.2.2版本,Producer 性能提升
  5. 0.11.0.0版本
    5.1 提供幂等性Producer API以及事务(Transaction)API,流处理结果正确性的及时
    5.2 对Kafka 消息格式做了重构,修复由于格式变更引起消息格式转换而导致的性能问题 0.11.0.3版本的消息引擎功能较完善

尽量保持客户端和服务器版本一致。

三. kafka线上部署方案

1. IO模型方面:

io模型分类:

  1. 阻塞式I/O
  2. 非阻塞式I/O
  3. I/O多路复用
  4. 信号驱动I/O
  5. 异步I/O

I/O模型使用场景

  1. java Socket对象的阻塞模式: 采用1
  2. java Socket对象的非阻塞模式:采用2
  3. 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线上环境

  1. RAID
    1.1 提供冗余的磁盘存储空间
    1.2 提供负载均衡

  2. 机器磁盘
    2.1 随机读写操作慢
    2.2 易损坏

  3. kafka
    3.1 实现了冗余机制提高高可靠性,可以弥补机器键盘的不足
    3.2 分区的概念,可以在软件层面实现负载均衡
    3.3 使用方式多是顺序读写

3.磁盘容量:

  1. 磁盘需要存储的内容
    1.1 数据
    1.2 索引数据 约为数据的10%
    1.3 压缩比:真正的数据大小是 (数据+索引数据)*压缩比
    1.4 实际应用中建议预留20%~30%的磁盘空间
  2. 需要考虑的因素
    2.1 新增消息数
    2.2 消息留存时间
    2.3 平均消息大小
    2.4 备份数
    2.5 是否启用压缩

4.带宽

kafka通过网络大量进行传输,带宽易成瓶颈。
可通过部署多台服务器解决。

预估方法:

  1. 根据实际带宽资源和业务SLA预估服务器数量
  2. 对于千兆网,建议每台服务器按照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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值