kafka简单入门

缘起

公司业务订单中心(ordercenter)模块中,会将用户的订单订单信息输入到kafkaz中,然后在消息处理(messageHandle)中心进行统一处理。

什么是kafka

kafka来源

  • LinkedIn开发
  • 2011年初开源,加入Apache基金会
  • 2012年从Apache Incubator毕业(成熟)
  • Apache顶级开源项目

什么是kafka

Kafka是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下:

  • 以时间复杂度为O(1)的方式提供消息持久化能力,并保证即使对TB级以上数据也能保证常数时间的访问性能
  • 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输
  • 支持Kafka Server间的消息分区,及分布式消息消费,同时保证每个partition内的消息顺序传输
  • 同时支持离线数据处理和实时数据处理

kafka结构介绍

kafka基本概念

  • Producer
    消息和数据的生产者,向kafka的一个topic发布消息的进程/代码/服务
  • Consumer
    消息和数据的消费者,订阅数据(topic)并且处理其发布的消息的进程/代码/服务
  • Consumer Group
    逻辑概念,对于同一个topic,会广播给不同的group,一个group中,只有一个consumer可以消费该消息
  • Broker
    物理概念,kafka集群中的每个kafka节点
  • Topic
    逻辑概念,kafka消息的类别,对数据进行区分、隔离
  • Partition
    物理概念,kafka下数据存储的基本单元。一个Topic数据,会被分散存储到多个Partition,每一个Partition是有序的。kafka会将一个Partition放在一个Broker上
  • Replication
    同一个Partition可能会有多个Replica(备份),多个Replica之间数据是一样的
  • Partition Leader
    一个Partition的多个Replica上,需要一个Leader负责该Partition与Producer和consumer交互,有且只有一个Leader,其他的Replica只负责备份
  • ReplicaManager
    负责管理当前Broker所有分区和副本的信息,处理kafkaControler发起的一些请求,副本状态的切换、添加/读取信息等

kafka基本概念延伸

Partition

  • 每一个Topic被切分为多个Partition
  • 消费者数目少于或等于Partition的数目
  • Broker Group中的每一个Broker保存Topic的一个或多个Partition
  • Consumer Group中的仅有一个Consumer读取Topic的一个或多个Partition,并且是唯一的Consumer

Replication

  • 当集群中有Broker挂掉的情况,系统可以主动的使用Replicas提供服务
  • 系统默认设置每一个Topic的Replication的系数为1(没有副本),可以在创建Topic时单独设置
  • Replication的基本单位是Partition
  • 所有的读和写都从Leader进,Followers只是作为备份
  • Follower必须能够及时复制Leader的数据
  • 增加容错性与可扩展性

kafka基本结构

在这里插入图片描述
提供了四种类型Api: Producer Api、Consumer Api、Streams Api、Connectors Api

  • kafka强依赖与ZooKeeper
    在这里插入图片描述

kafka消息结构

在这里插入图片描述

  • Offset
    记录当前消息的偏移
  • Length
    消息的长度
  • CRC32
    校验字段,校验当前信息的完整性,避免信息不完整而导致数据消费或正常失败
  • Magic
    固定的数字,判断是不是kafka的消息,如与kafka设定的Magic不一致,那么消息就可以丢弃,不需要其他校验
  • attributes
    可选字段,存放当前消息的一些属性,会有一个枚举值
  • Timestamp
    当前消费的时间戳
  • key与value
    长度不限制

kafka特点

分布式

  • 多分区,有多个Partition
  • 多副本,有多个Replication
  • 多订阅者,数量少于或等于partition
  • 基于Zookeeper调度,Broker/Partition等很多信息存放与Zookeeper上

高性能

  • 高吞吐量:可以达到每秒几十万
  • 低延迟
  • 高并发
  • 时间复杂度为O(1)

持久性与扩展性

  • 数据可持久化
  • 容错性:多副本,按组消费
  • 支持在线水平扩展:Broker/Topic有一个或多个Partition,消费者按组划分,增加新的机器新的Topic
  • 消息自动平衡:将消息在服务端进行平衡,避免过于集中在某几台服务器;在消费者订阅时进行连接的自动平衡

kafka场景与应用

kafka应用场景

  • 消息队列
  • 行为跟踪
  • 元数据监控
  • 日志收集
  • 流处理
  • 事件源
  • 持久性日志(commit log)

kafka环境启动

ZooKeeper下载

  • 地址:https://www.apache.org/dyn/closer.cgi/zookeeper/
  • 修改conf/zoo_sample.cfg
    重命名为“zoo.cfg”,编辑dataDir=D:/SoftwareDevelop/zookeeper-3.4.13/data
  • 设置环境变量
    添加系统变量:ZOOKEEPER_HOME=D:\Kafka\zookeeper-3.4.13
    编辑path系统变量,添加路径:%ZOOKEEPER_HOME%\bin
  • 启动ZooKeeper
    打开cmd,输入“zkServer“,运行Zookeeper
    在这里插入图片描述

Kafka下载

  • 地址:http://kafka.apache.org/downloads
    在这里插入图片描述
    血的教训。。此处一定要下载二进制版本,否则会报找不到主加载类kafka.kafka
    一开始下的源码,然后报错,按照网上的说法是什么jdk版本等原因,后来找到这篇文档在Windows安装运行Kafka,发现是下载错压缩包了
  • 修改config/server.properties
    log.dirs=D:/SoftwareDevelop/kafka_2.12-2.1.0/kafka-logs
  • 启动kafka
    进入Kafka安装目录D:\Kafka\kafka_2.12-0.11.0.0,按下Shift+右键,选择“打开命令窗口”选项,打开命令行,输入:

.\bin\windows\kafka-server-start.bat .\config\server.properties
在这里插入图片描述

kafka简单测试

创建topic

  • 进入Kafka安装目录,输入

.\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic yukang-kafka-test
在这里插入图片描述

查询topic

  • 进入Kafka安装目录,输入

.\bin\windows\kafka-topics.bat --list --zookeeper localhost:2181
在这里插入图片描述

ZooKeeper中查看

在这里插入图片描述

创建生产者

  • 进入Kafka安装目录,输入

.\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic
yukang-kafka-test

进入命令交互式界面,意味着启动了生产者
在这里插入图片描述

创建消费者

  • 进入Kafka安装目录,输入

.\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic yukang-kafka-test --from-beginning
在这里插入图片描述

测试

  • 在producer端输入信息
    在这里插入图片描述
  • from-beginning
    从头开始消费,会获取生产者里的所有信息,不指定则只获取实时的信息
    在这里插入图片描述

spring boot集成Kafka

下一章springboot集成Kafka

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值