Kafka基础
-
简介
-
#概念:消息中间件(消息系统)
//消息系统分类:
点对点 消息队列(peer-to-peer)
-
- 发布/订阅 消息队列
-
#作用:缓存地带
#消息系统适用场景
-
解耦 各位系统之间通过消息系统这个统一的接口交换数据,无须了解彼此的存在
-
冗余 部分消息系统具有消息持久化能力,可规避消息处理前丢失的风险
-
扩展 消息系统是统一的数据接口,各系统可独立扩展
-
峰值处理能力 消息系统可顶住峰值流量,业务系统可根据处理能力从消息系统中获取并处理对应量的请求
-
可恢复性 系统中部分组件失效并不会影响整个系统,它恢复后仍然可从消息系统中获取并处理数据
-
异步通信 在不需要立即处理请求的场景下,可以将请求放入消息系统,合适的时候再处理
#架构
主要分为3部分
生产者(producer),消费者(consumer),kafka(broker)外加一个zookeeper来储存源数据
Broker 中可以包含多个topic ,topic 是一个逻辑存在的基本运行单元
topic 中可以包含多个partation, partition是真正存储数据的地方,类似于书架,一个partition是一个强有序的队列
partition是由segmend组成的
segmend由两部分组成
一部分是.log结尾的文件,作用存储kafka的数据
另一部分是.index结尾的文件,作用kafka存储数据的索引文件
#过程
生产者: 对数据的生产可以使用同步生产也可以使用异步生产,将生产完成的数据 push到kafka中
kafka: kafka收到生产者生产的数据后,将数据保存到具体的partition中,将该批数据的元数据信息写到zookeeper上,
消费者: 当消费者要消费数据时,会先从zookeeper中获取数据偏移量以及元数据,获取之后,通过主动拉取的形式来消费数据。
#kafka数据生产的格式:
* (key,value)格式的数据:在对数据进行存储的时候,采用的存储策略是对key进行hashcode取模来进行具体分配到哪个partiton中进行存储
* string格式的数据:在对数据进行存储的时候,采用的策略是轮训策略。
如果以上的存储策略都不符合业务生产需求,可以自定义存储策略 需要集成Partitioner接口
-
目录结构
注意:演示的所有的命令行操作都在bin目录下进行
-
配置详解
要想启动,我们只需要修改kafka的配置文件就可以了
注意
1.外网地址尽量写ip,别写主机名,不然可能访问不到
2.本地地址如果写ip地址的话,启动producer,consumer 参数为本地ip
3.本地地址如果写localhost的话,启动producer,consumer参数为localhost
默认localhost
-
服务启动与查看
由于kafka服务以来与zookeeper所以需要先启动zookeeper
而zookeeper又需要java 来支持,所以需要大家自行准备jdk
命令
启动zookeeper服务 ./zookeeper-server-start.sh ../config/zookeeper.properties
启动kafka服务./kafka-server-start.sh ../config/server.properties
创建topic
./kafka-topics.sh --zookeeper localhost:2181 --create --topic test4 --partitions 3 --replication-factor 1
--zookeeperzookeepe连接地址:端口
--create 说明要创建
--topic topic名称
--partitions partitions数量
启动生产者
./kafka-console-producer.sh --broker-list localhost:9092 --topic test3
由于生产者并不依赖于zookeeper,但是生产者需要知道写入数据到那个broker中的
又因为topic 是运行的基本单元,因此需要指定topic以及broker所在地址
启动消费者
./kafka-console-consumer.sh --zookeeper localhost:2181 --topic test3
在生产者发送数据 可以看到消费者已经在消费
: