kafka学习

Kafka学习

image.png

消息引擎系统

  • Apache Kafka是一款开源的消息引擎系统,根据维基百科的定义,消息引擎系统是一组规范,企业利用这组规范在不同系统之间传递语义准确的消息,实现松耦合的异步式数据传递。通俗来讲,就是系统A发送消息给消息引擎系统,系统B从消息引擎系统中读取A发送的消息。

  • 消息引擎系统要设定具体的传输协议,即我用什么方法把消息传输出去,

    常见的方法有2种:

    • 点对点模型
    • 发布/订阅模型
  • 系统A不能直接发送消息给系统B,中间还要隔一个消息引擎呢,是为了“削峰填谷”。

kafka术语

image.png

  • 消息: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.dirslog.dir

  • 与zookeeper相关的参数:zookeeper.connect

  • 与Broker连接相关的参数;listenersadvertised.listenershost.name/port

  • 关于Topic管理的参数:auto.create.topics.enableunclean.leader.election.enableauto.leader.rebalance.enable

  • 关于数据留存的参数:log.retention.{hours|minutes|ms}log.retention.bytesmessage.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讲

posted @ 2022-02-24 23:03  蔚蓝的海洋  阅读(151)  评论(0编辑  收藏  举报