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

it2023-07-29  71

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)