Kafka简介,安装及简单的操作

kafka的介绍
Kafka 是分布式发布-订阅消息系统,即,kafka是一种分布式的消息队列工具。
kafka特点
a.高吞吐量
kafka每秒可以生产约25万消息(50MB),每秒可以处理55万消息(110MB)
b.持久化数据存储
可进行持久化操作。将消息持久化到磁盘,按顺序读写。据测试按顺序磁盘读写比随机内存写还要快。
c.分布式系统易于扩展
所有的producer、broker和consumer都会有多个,均为分布式。无需停机就可以添加机器。
d.客户端状态维护
消息被处理的状态是在consumer端维护,而不是由server端维护。减轻服务器端的压力,为客户端会话管理提供了更好的灵活性。
描述架构之前我还想再铺垫一下使用的步骤。
消息写入到kafka是需要通过生产者端的,生产者端可以是flume可以是Nginx也可以是我们自己调用kafkaAPI手写生产者,消费者也是如此。
但是无论是什么生产者来源,都需要在kafka中创建对应的topic(主题)指定patition(分区:分区的存在是为了提高并发能力,分区数的多少由消费者多少来定义,最好结合sparkRDD数或者,如果需求是将同一个客户端的数据存入一个文件,就可以将分区与文件一一对应,存入HDFS或被Spark消费或闯入其他机器。曾经面试被问过)
如果有不理解的自己可以尝试画图并动手操作一下。
有了以上介绍以后就直接进入kafka架构:
看架构图还是需要明白一个概念就是kafka中的leader与follower
在kafka集群中每个分区有若干副本,这些副本分布式的存放在不停服务器上,其中有一个称为leader,leader负责读写操作,其他的副本就只是同步,选举leader跟zookepeer不一样,有一个ISR区域,可以想象成为奴隶场(毕竟干活的都是他),只要ISR区域中有机器活着,leader就会从中产生,另外kafka 0.8.*使用的是选择第一个活过来的replica,虽然可能会丢失数据。
在这里插入图片描述1.producer:
消息生产者,发布消息到 kafka 集群的终端或服务。
2.broker:
kafka 集群中包含的服务器。broker (经纪人,消费转发服务)
3.topic:
每条发布到 kafka 集群的消息属于的类别,即 kafka 是面向 topic 的。
4.partition:
partition 是物理上的概念,每个 topic 包含一个或多个 partition。kafka 分配的单位是 partition。
5.consumer:
从 kafka 集群中消费消息的终端或服务。
6.Consumer group:
high-level consumer API 中,每个 consumer 都属于一个 consumer group,每条消息只能被 consumer group 中的一个 Consumer 消费,但可以被多个 consumer group 消费。
即组间数据是共享的,组内数据是竞争的。
7.replica:
partition 的副本,保障 partition 的高可用。
8.leader:
replica 中的一个角色, producer 和 consumer 只跟 leader 交互。
9.follower:
replica 中的一个角色,从 leader 中复制数据。
10.controller:
kafka 集群中的其中一个服务器,用来进行 leader election 以及 各种 failover。
11.zookeeper:
kafka 通过 zookeeper 来存储集群的 meta 信息。

消息流程:
在这里插入图片描述
1:producer 先从 zookeeper 的 “/brokers/…/state” 节点找到该 partition 的 leader
2:producer 将消息发送给该 leader
3:leader 将消息写入本地 log
4:followers 从 leader pull 消息,写入本地 log 后 leader 发送 ACK
5:leader 收到所有 ISR 中的 replica 的 ACK 后,增加 HW(high watermark,最后 commit 的 offset) 并向 producer 发送 ACK。
ISR指的是:比如有三个副本 ,编号是① ② ③ ,其中② 是Leader ① ③是Follower。假设在数据同步过程中,①跟上Leader,但是③出现故障或没有及时同步,则① ②是一个ISR,而③不是ISR成员。后期在Leader选举时,会用到ISR机制。会优先从ISR中选择Leader
安装Kafka
1:保证虚拟已安装jdk
2: 虚拟机已启动Zookeeper(https://www.cnblogs.com/zhouzetian/p/13345542.html)
3: 安装Kafka
下载安装包: wget http://mirror.bit.edu.cn/apache/kafka/2.4.0/kafka_2.11-2.4.0.tgz
解压: tar -xvf kafka_2.11-2.4.0.tgz
配置环境变量:
vim /etx/profile
添加kafka路径

export KAFKA_HOME=/opt/kafka
export PATH=$PATH:$KAFKA_HOME/bin

环境变量生效:
source /etc/profile
修改Kafka配置文件(在kakfa安装目录下的config目录下)
vim server.properties

#broker 的编号,如果集群中有多个broker,则每个broker 的编号要设置的不同
broker.id=0
#对外提供的服务入口地址
listeners=PLAINTEXT://localhost:9092
# 存放消息的日志文件
log.dirs=/tmp/kafka-logs/
# kafka所需要的Zookeeper集群地址
zookeeper.connect=localhost:2181/kafka

4: 启动Kafka(在kakfa安装目录下)
控制台模式:
bin/kafka-server-start.sh config/server.properties
后台运行模式:
bin/kafka-server-start.sh -daemon config/server.properties
Kafka创建&查看topic,生产&消费指定topic消息
1:创建topic(在kakfa安装目录下)
/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
2:查看topic(在kakfa安装目录下)
/bin/kafka-topics.sh --list --zookeeper localhost:2181
在这里插入图片描述
3:用Kafka的console-producer在topic test1 生产消息
/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test1
输入想要发送的消息,敲回车键
在这里插入图片描述4:.用Kafka的console-consumer 消费topic test1的消息
/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test1 --from-beginning
在这里插入图片描述1)若producer 和 consumer 两个窗口同时打开,在producer输入信息,consumer会立即消费信息并打印在终端
2)新开一个终端,去消费同一个topic,刚刚已经消费过的消息还会被新终端继续消费。也就是说,消息被消费过后不会立即被删除。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值