Kafka (一)kafka的设计思想及基本介绍

需求背景

什么是消息中间件

之前做过阻塞队列和多线程实现生产者和消费者模式,如果请求越来越多,会导致比较耗时,到了分布式这样多进程情况下,怎么保证功能正常使用
分布式的情况下需要异步队列来实现处理任务。
因此需要一个第三方消息处理中间件来帮管理这些消息,实现数据的存储和传输。
所以,消息中间件是:能高效的传输数据,基于数据通信实现分布式的集成。

消息中间件的设计

思考下消息中间件需要实现哪些功能
基础功能
1、最最基本的是数据的接收和发送(网络通信和NIO)
2、消息的存储(持久化/非持久化)数据库的存储、文件存储(磁盘、顺序读写、页缓存、持久化的时机、零拷贝)、内存
3、序列化/反序列化(dubbo->avro->protobuf/zk(jute))
4、是否跨语言
5、消息确认机制,避免消息重发
高级功能
1、消息的有序性
2、是否支持事务消息
3、消息收发的性能,是否支持高并发大量数据
4、是否支持集群(master选举)-》自己实现选举、第三方的实现(zk)
5、消息的可靠性存储(副本机制) leader-follower
6、是否支持多协议

Kafka的介绍

什么是kafka

首先kafka是一个消息中间件
是实现消息的发布和订阅的中间件
是实现分布式的消息发布和订阅的中间件
是实现分布式的消息发布和订阅,且高性能高并发的中间件

kafka的应用场景

前面说了kafka是消息中间件,高吞吐量,高并发。所以适用于大规模消息处理应用的系统。
行为跟踪
kafka可以跟踪用户使用行为,如浏览页面,搜索等操作监控用户
日志收集

kafka的架构

在这里插入图片描述

名词概念

1、broker
kafka集群中包含的服务器,成为broker。
broker不维护消息状态
borker不关心消息是否被消费,只记录一个offset值(指向partition下一个被消费的消息位置)
消息的状态保存在consumer中,意味着consumer处理不好,一个消息可能会被重复消费
broker直接用磁盘存储、线性读写、速度快->避免数据在jvm内存和系统内存之间的复制,能减少对象的创建和垃圾回收,减少性能消耗
2、producer
发布消息到broker
3、consumer
从broker取消息处理
4、topic
每个消息发送到kafka都有一个topic,算是归类吧
物理上:不同topic的消息分开存储,
**逻辑上:**一个topic可以保存在一个或者多个broker上,
5、partition
分区,物理上的概念,一个topic有一个或多个分区
6、consumer group
每个consumer属于一个group,有groupid
一个消息只能被一个group消费一次
7、topic 和 partition
topic理论上可以看做一个队列,每个消息必须指定topic,可以简单理解必须把消息放入哪个队列中。
为了提高kafka的吞吐效率,可以将一个topic分成多个partition,每个partition在物理上对应一个文件夹,这个文件夹下存放这个partition所有消息和索引文件。
8、consumer 和 partition
consumer和partition数量一致,一对一
分区数量大于consumer,一个consumer消费多个分区
分区数小于cnsumer,则有consumer会空闲出来

kafka安装

下载kafka

https://archive.apache.org/dist/kafka/2.0.0/kafka_2.11-2.0.0.tgz

安装

tar -zxvf kafka_2.11-2.0.0.tgz 解压

配置zookeeper

kafka自带内置zookeeper,也可以配置单独的zookeeper集群
修改server.properties, 增加zookeeper的配置:
ookeeper.connect=localhost:2181

启动停止

启动kafka
sh kafka-server-start.sh -damoen …/config/server.properties
停止kafka
sh kafka-server-stop.sh -daemon …/config/server.properties

kafka的基本操作

创建topic

sh kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

Replication-factor 表示该topic需要在不同的broker中保存几份,这里设置成1,表示在两个broker中
保存两份
Partitions 分区数

查看topic

sh kafka-topics.sh --list --zookeeper localhost:2181

查看topic属性

sh kafka-topics.sh --describe --zookeeper localhost:2181 --topic first_topic

消费消息

sh kafka-console-consumer.sh --bootstrap-server 192.168.13.106:9092 --topic test
--from-beginning

发送消息

sh kafka-console-producer.sh --broker-list 192.168.244.128:9092 --topic
first_topic

集群配置

环境准备

准备三台虚拟机
按照上面的步骤每台都安装kafka

修改配置

  • 分别修改三台机器的server.properties配置,同一个集群中的每个机器的id必须唯一
broker.id=0
broker.id=1
broker.id=2
  • 修改zookeeper的连接配置,也可配置zookeeper集群
zookeeper.connect=192.168.116.137:2181
  • 修改listeners配置
    如果配置了listeners,那么消息生产者和消费者会使用listeners的配置来进行消息的收发,否则,会使用localhost
    PLAINTEXT表示协议,默认是明文,可以选择其他加密协议
listeners=PLAINTEXT://192.168.13.102:9092
  • 分别启动三台服务器
sh kafka-server-start.sh -daemon ../config/server.properties
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值