kafka学习
Kafka学习
消息引擎系统
-
Apache Kafka是一款开源的消息引擎系统,根据维基百科的定义,消息引擎系统是一组规范,企业利用这组规范在不同系统之间传递语义准确的消息,实现松耦合的异步式数据传递。通俗来讲,就是系统A发送消息给消息引擎系统,系统B从消息引擎系统中读取A发送的消息。
-
消息引擎系统要设定具体的传输协议,即我用什么方法把消息传输出去,
常见的方法有2种:
- 点对点模型
- 发布/订阅模型
-
系统A不能直接发送消息给系统B,中间还要隔一个消息引擎呢,是为了“削峰填谷”。
kafka术语
- 消息:Record。Kafka 是消息引擎嘛,这里的消息就是指 Kafka 处理的主要对象。
- 主题:Topic。主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。
- 分区:Partition。一个有序不变的消息序列。每个主题下可以有多个分区。
- 消息位移:Offset。表示分区中每条消息的位置信息,是一个单调递增且不变的值。
- 副本:Replica。Kafka 中同一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本。副本还分为领导者副本和追随者副本,各自有不同的角色划分。副本是在分区层级下的,即每个分区可配置多个副本实现高可用。
- 生产者:Producer。向主题发布新消息的应用程序。
- 消费者:Consumer。从主题订阅新消息的应用程序。
- 消费者位移:Consumer Offset。表征消费者消费进度,每个消费者都有自己的消费者位移。
- 消费者组:Consumer Group。多个消费者实例共同组成的一个组,同时消费多个分区以实现高吞吐。
- 重平衡:Rebalance。消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。Rebalance 是 Kafka 消费者端实现高可用的重要手段。
kafka优势
- kafka在设计之初就旨在提供三个方面的特性:
- 提供一套API实现生产者和消费者
- 降低网络传输和磁盘存储开销
- 实现高伸缩性架构
- 作为流处理平台,kafka与其他主流大数据流式计算框架相比,优势有两点:
- 更容易实现端到端的正确性
- 它自己对于流式计算的定位
- Apache kafka是消息引擎系统,也是一个分布式流处理平台。除此之外,kafka还能被用作分布式存储系统。不过我觉得你姑且了解下就好了,我从没有见过在实际生产环境中,有人把kafka当做持久化存储来用。
kafka版本
- 0.7版本:只提供最基础的消息队列功能
- 0.8版本:引入了副本机制,至此kafka成为了一个真正意义上完备的分布式高可靠消息队列解决方案
- 0.9版本:
- 增加了基础的安全认证/权限功能;
- 使用Java重写了新版本消费者API;
- 引入了Kafka Connect组件
- 0.10版本:
- 引入了Kafka Stream,正式升级成分布式流处理平台
- 0.11版本:
- 提供了幂等性Producer API以及事务API;
- 对Kafka消息格式做了重构
- 1.0和2.0版本:
- 主要还是Kafka Streams的各种改进
Kafka线上集群部署
因素 | 考量点 | 建议 |
---|---|---|
操作系统 | 操作系统I/O模型 | 将kafka部署在Linux系统上 |
磁盘 | 磁盘I/O模型 | 普通环境使用机械磁盘,不需要搭建RAID |
磁盘容量 | 根据消息数、留存时间预估磁盘容量 | 实际使用中建议预留20%~30%的磁盘空间 |
带宽 | 根据实际带宽资源和业务SLA预估服务器数量 | 对于千兆网络,建议每台服务器按照700Mbps来计算,避免大流量下的丢包 |
Kafka集群参数配置
Broker端参数
-
与存储信息相关的参数:
log.dirs
和log.dir
-
与zookeeper相关的参数:
zookeeper.connect
-
与Broker连接相关的参数;
listeners
、advertised.listeners
和host.name/port
-
关于Topic管理的参数:
auto.create.topics.enable
、unclean.leader.election.enable
和auto.leader.rebalance.enable
-
关于数据留存的参数:
log.retention.{hours|minutes|ms}
、log.retention.bytes
和message.max.bytes
Topic级别参数
retention.ms
:规定了该Topic消息被保存的时长retention.bytes
:规定了要为该Topic预留多大的磁盘空间max.message.bytes
:它决定了Kafka Broker能够正常接收该Topic的最大消息大小
JVM参数
KAFKA_HELP_OPTS
:指定堆大小KAFKA_JVM_PERFORMANCE_OPTS
:指定GC参数
操作系统参数
- 文件描述符限制
- 文件系统类型
- Swappiness
- 提交时间
第9讲