Kafka核心概念:
具体可以参考以下这篇文章的讲解。
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
特点:
分布式消息队列
+ 多副本
+ 容错:in-sync replicas
+ I S R =zoo keeper=> Leader 副本丢失,从 I S R中选择新的 Leader
+ I S R 宕机 => 从剩余的 follower 中选择替代
+ 读写分离
+ Leader 负责写操作
+ I S R 中任何一个 replica 都可以读、
+ 多分区:M P => multiple partitions
+ 低延时
+ 主题分区数量最优设计:节点数 * 物理核数
+ 零拷贝
+ 产销解耦
+ 生产者 ---> Kafka <--- 消费者
+ 生产者数量:分区数个生产者轮询写入,均匀分布
+ 消费者数量:分区数个消费者一对一读取,并行消费
+ 消费模式
+ 指定位置 --from-beginning
+ 分组消费 --group-id
+ 在服务端存储分组名,主题和偏移量的映射数据
+ 客户端记录消费位置
+ r e d i s
+ m y s q l
安装 :
zookeeper安装
在安装前首先请确保已经安装了zookeeper。
1、下载zookeeper,解压。
下载地址:https://zookeeper.apache.org/releases.html#download
2、创建zookeeper配置文件
在zookeeper解压后的目录下找到conf文件夹,进入后,复制文件zoo_sample.cfg,并命名为zoo.cfg
zoo.cfg中一共四个配置项,可以使用默认配置。
3、配置环境变量
vim /etc/profile.d/myenv.sh
4、启动zookeeper。
zkServer.sh start
单机安装:
1、下载、解压
2、配置
config/server.properties
#----------------------------------
num.partitions=1 #分区数
#超过一周或文件大小超过1个G,删除历史数据
delete.topic.enable=true #允许删除主题
log.retention.hours=168 #数据保留一周
log.segment.bytes=1073741824 #数据最大为4G
log.retention.check.interval.ms=300000 #多久检查一次根据规则是否删除数据
zookeeper.connect=single:2181
#----------------------------------
nohup kafka-server-start.sh /opt/software/kafka_2.12_2.8.0/config/server.properties 1>/dev/null 2>&1 &
# kraft 模式 #
config/kraft/server.properties
advertised.listeners=PLAINTEXT://hostname:9092
启动服务:
kafka-server-start.sh config/kraft/server.properties
后台启动:
nohup kafka-server-start.sh
/opt/software/kafka_2.12_2.8.0/config/server.properties 1>/dev/null 2>&1 &
常用命令:
#shell 控制台处理
#查看主题
kafka-topics.sh --list --bootstrap-server single:9092
#创建主题
kafka-topics.sh --create --topic test01 --partitions 1 --replication-factor 1 --bootstrap-server single:9092
#查看主题详情
kafka-topics.sh --describe --topic test01 --bootstrap-server single:9092
#创建控制台消费者
#默认的键值反序列化都是字符串:
# --key|value-deserializer
# org.apache.kafka.common.serialization.StringDeserializer
# --group group01
kafka-console-consumer.sh --bootstrap-server single:9092 --topic test01 --property print.key=true --from-beginning
#创建控制台生产者 vim events.log
kafka-console-producer.sh --broker-list single:9092 --topic test01 < events.log
# 删除主题和数据(不能被正在生产或消费)
kafka-topics.sh --bootstrap-server single:9092 --delete --topic test01
Maven依赖
<!-- 2.8.0 -->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>${kafka.version}</version>
</dependency>