Kafka
2021-04-12 10:42:08 0 举报
AI智能生成
kakfa
作者其他创作
大纲/内容
基础知识
背景
消息系统
消息系统分类
点对点
采用队列方式,消费一条数据删除一条
<b><font color="#f15a23">发布-订阅</font></b>
发布者<br>
将消息主动推送到消息系统
主题
一个消息的分类<br>
订阅者
采用拉或推的方式从消息系统获取数据<br>
应用场景
应用解耦
将项目各模块的消息统一处理和存储
流量控制
秒杀系统,在应用前端加入消息队列控制访问流量
日志处理
接收、存储、传输日志数据<br>
消息通讯
消息队列内置高效的通信机制,可以用在单纯的消息通讯<br>
发展历史
linkedin开发
scala语言编写<br>
介绍
kafka是一个<b><font color="#7dcdc2">分布式发布-订阅消息系统</font></b>,构建在zookeeper同步服务之上
特点
<b><font color="#f15a23">高并发</font></b>:支持数千个客户端同时读写;
<b><font color="#f15a23">可扩展性</font></b>:kafka集群支持热扩展;
<b><font color="#f15a23">持久性、可靠性</font></b>:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失;
<b><font color="#f15a23">高吞吐量、低延迟</font></b>:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒;
<b><font color="#f15a23">容错性</font></b>:允许集群中节点故障(若副本数量为n,则允许n-1个节点故障);
支持语言
java、python、c++、php等
其它消息队列<br>
RabbitMQ <br>Redis <br>ZeroMQ <br>ActiveMQ
核心API
生产者API<br>
允许应用程序发布记录流至一个或者多个kafka的主题(topics)。
消费者API
允许应用程序订阅一个或者多个主题,并处理这些主题接收到的记录流。
StreamsAPI
允许应用程序充当流处理器(stream processor),从一个或者多个主题获取输入流,并生产一个输出流到一个或 者多个主题,能够有效的变化输入流为输出流。
ConnectorAPI
可以使用这些connector进行关系数据库或HDFS等常用系统到Kafka的数据传输,也是用来构建ETL的一种方案
Kafka术语
Broker
kafka集群中包含一个或者多个服务实例,这种服务实例被称为Broker(服务器)
Topic<br>
消息根据Topic进行归类<br>
Partition<br>
Partition是一个物理上的概念,每个Topic包含一个或者多个Partition.每个分区的offset从0开始
Producer<br>
负责发布消息到kafka的Broker中。
Consumer<br>
消息消费者,向kafka的broker中读取消息的客户端
Consumer Group
每一个Consumer属于一个特定的Consumer Group
分区数越多,同一时间可以有越多的消费者来进行消费,消费数据的速度就会越快,提高消费的性能
其它
kafka副本:kafka Partition Replicas
副本数(replication-factor):控制消息保存在几个broker(服务器)上,<br>一般情况下等于broker的个数,不能多于broker数量
<b><font color="#f15a23">副本因子是包含本身</font></b>|<b><font color="#f384ae">同一个副本因子不能放在同一个Broker中</font></b>。
副本作用:<b><font color="#f15a23">让kafka读取数据和写入数据时的可靠性</font></b>
kafka偏移量:offset
offset是一个long类型数字
应用场景
<b><font color="#f15a23">日志收集</font></b>:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer;
<b><font color="#f15a23">消息系统</font></b>:解耦生产者和消费者、缓存消息等;
<b><font color="#f15a23">用户活动跟踪</font></b>:kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后消费者通过订阅这些topic来做实时的监控分析,亦可保存到数据库;<br>
<b><font color="#f15a23">运营指标分析</font></b>:kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告;
<b><font color="#f15a23"> 流式处理</font></b>:比如spark streaming,flink和storm读取kafka数据,进行流计算
集群操作
启动/停止
后台启动:nohup bin/kafka-server-start.sh config/server.properties 2>&1 &
停止命令:bin/kafka-server-stop.sh
创建一个Topic
bin/kafka-topics.sh --create --zookeeper node01:2181 --replication-factor 2 -- partitions 3 --topic test
查看主题命令
bin/kafka-topics.sh --list --zookeeper node01:2181,node02:2181,node03:2181
生产者生产数据
bin/kafka-console-producer.sh --broker-list node01:9092,node02:9092,node03:9092 --topic test
消费者消费数据
bin/ kafka-console-consumer.sh --from-beginning --topic test --zookeeper node01:2181,node02:2181,node03:2181
运行describe查看topic的相关信息
bin/kafka-topics.sh --describe --zookeeper node01:2181 --topic test
增加topic分区数
bin/kafka-topics.sh --zookeeper zkhost:port --alter --topic topicName --partitions 8
动态修改kakfa的配置
#任意kafka服务器执行以下命令可以增加topic分区数<br>bin/kafka-topics.sh --zookeeper node01:2181 --alter --topic test --config flush.messages=1
动态删除kafka集群配置
bin/kafka-topics.sh --zookeeper node01:2181 --alter --topic test --delete-config flush.messages
删除topic
#默认情况下知识打上一个删除的标记,在重新启动kafka后才删除。<br>#如果需要立即删除,则在server.properties中配置delete.topic.enable=true<br><br>kafka-topics.sh --zookeeper zkhost:port --delete --topic topicName<br>
kafka架构
官方文档架构图
整体架构图
运行流程
优化
0 条评论
下一页