kafka入门巨献!简介、架构原理、配置及安装、监控等

目录:

1、kafka的介绍
2、kafka与传统消息队列的区别
3、kafka的架构模型
4、kafka的安装与命令行使用
5、kafka的API
6、kafka的分区(共4种)
7、kafka的配置文件说明
8、flume与kafka的整合
9、kafka如何保证数据的不丢失
10、kafkaManager监控工具的安装与使用(可视化界面)
11、kafka为什么这么快

1、kafka的介绍

apache下开源的消息系统,分布式的消息队列,是scala编写的。
Kafka是一个分布式消息队列:生产者、消费者的功能。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。
broker是kafka的一个实例,kafka集群依赖于zookeeper。

2、kafka与传统消息队列的区别

*传统的是从 topic里监听后,消费者被动接收的。pub和sub。
*Kafka的消费者是主动去取从kafka的集群。1 push和pull。2 吞吐量大。3 主备模式。4 可扩容。

3、kafka的架构模型

producer:生产消息,并且将消息push到kafka集群当中的topic当中去。

topic:所有消息都可以推送到某一类自定义的topic当中去,topic也有分区和副本的概念。

consumer:通过zookeeper集群连接到kafka集群,消费topic,通过pull的方式主动拉取。

broker:kafka的每一个节点就叫broker 也就是台机器。类似于hadoop的datanode。

Zookeeper:记录kafka集群保存的元数据信息
  • topic组件介绍:
    paritition:topic可以分为多个partition(区),是有序的队列,其中的每条信息都有一个id(offset),不是整体有序,但是分区有序。一个partition分为多个segment。

    offset:偏移量 是个long型的数字,方便查找,唯一标记一条信息,数据不丢失

    Segement:消息存储的真实文件,会不断生成新的。

  • partition 设计 (拓展)

  • 存储层面上:(图的中下位置)

    • 生产者(producer) :ACK确认机制
    • 消费者(consumer): partition的消息记录在.log文件里;每个partition在内存中对应一个index列表,记录每个segment中的第一条消息偏移offset。
  • ACK机制:在图的左下角

kafka架构

4、 kafka的安装

  • 4.1、安装

方法1:docker安装kafka,参考文章:https://blog.csdn.net/qq_18769269/article/details/80880633
方法2:原生的,对于原生的安装,本文只大体说一下。
kafka是 Scala 2.11-1.0.0 版本(是向下兼容的)

 安装:上次,安装,安装后,改配置文件 server.properties。注意:broker.id   host.id
 启动:(启动前先启动zk集群)
    nohup 和 & 配合使用 是后台启动,指定配置文件,日志输出到/dev/null 2>&1 &(目的地址类似于黑洞)
    nohup  bin/kafka-server-start.sh config/server.properties >/dev/null 2>&1 &  (在kafka目录下)
  • 4.2 kafka 命令行的管理与使用
    主要是三个脚本:
    • 创建topic: 5个主要参数
      –create 表示创建topic
      –partitions 表示指定我们topic的分区书
      –replication-factor 表示指定我们的副本数
      –topic 指定我们topic的名字
      –zookeeper 指定我们zookeeper的地址

    • 创建producer发送数据: 指定kafka集群地址和topic;然后发送数据
      –broker-list 指定我们kafka集群的地址
      –topic 指定我们的消息发送到哪个topic里面去

    • 创建consumer:接收数据。
      –bootstrap-server 表示我们的kafak集群的地址
      –from-beginning 表示我们从最开始的数据进行消费
      –topic指定我们topic的名字

注:如果有乱码的话,可能是因为src客户端工具乱码。

5、 kafka的API

这里就不详细介绍了…

java API:
创建maven工程、导入jar包。官网里documentation下有介绍
producer,consumer(注意开启kafka的offset自动提交功能,保证数据不丢失,可以说自己遇到

问题:kafka Api操作的时候,没有开启offset自动提交功能,导致数据丢失)

6、 kafka分区策略( 4 种 )

把消息怎么存在kafka的topic里):

   1)手动指定用分区
   2)通过消息的key 进行hash 取模 (注:Key值一定要变,要不造成数据倾斜)  
   3)轮循      实际工作中常用这个均匀放(实现负载均衡)
   4)自定义分区  implements Partitioner(一般不用)

7、kafka的配置文件说明

  • server.properties :(只有这个在linux配,剩下的俩在代码中配)
    broker标识、监听端口、处理网络请求的线程数量、IO数量、缓存区大小、kafka日志存放路径、清理 恢复和保存log,index的线程数、 segement大小,时间、本机id、能否删除topic

  • producer.properties: (一般不用自己写,整合就有,如果用自己写,就把红的配了)
    是否压缩、设置ACK机制 0、1、-1(工作用1) 、发送消息异步(快,工作上用这个多)还是同步(慢但数据不丢失)、堆积、充实次数…

  • consumer.properties:
    zookeeper地址、多久负载均衡、offset多久更加到zk、组、offset自动提交、最大取多少块缓存(调优)

8、flume与kafka的整合

Flume 1.8.0 ,看官网。整合的时候,flume就相当于生产者。

  1. 整合后的 配置文件:sources、channel、kafka sink
    注意: 1) 忽略 tmp 用正则表达式粘贴 ; 2) 如果是从windows上传文件的话,必须得设置格式是GBK,默认是UTF-8)

  2. 为什么要flume 采集数据后 要通过 kafka 集群?
    答:1、解决数据流平缓性问题 ,统一平台 (可以设置一次性取多少,不会一次性过来太多或者低风期过少)

  3. flume如何采集windowsServer的信息?(因为flume只能采集linux的)
    答:windowsServer先通过ftp传到linux,再从linux采集。

9、kafka如何保证数据的不丢失

生产者producer如何保证数据的不丢失

  • 同步模式
    通过ack机制来确认消息已经收到。可以设置,有0、1、-1 取值。
    一般工作用 1 ,parition的主节点保存后确认成功即可;如果是-1,副本和主节点都要确认,效率低点 安全性最高;0 是不用确认。
  • 异步模式
    一批一批的确认,设置 多少时间往磁盘刷新一次数据 和 多少条数据往磁盘刷新一次。
    2)、消费者consumer如何保证数据的不丢失
    消费者一般通过offset偏移量,每次读取上次的偏移量 来确保数据不丢失。

10、kafkaManager监控工具的安装与使用(可视化界面)

方法1:docker安装kafkaManager,参考文章,里面docker安装了zk,kafka,kafkamanager:https://blog.csdn.net/qq_18769269/article/details/80880633

方法2:原生的,这里只是大体说一下。

  • 安装:上传压缩包解压;修改配置文件(zk地址);后台启动kafkaManager 并 指定配置文件位置;从页面访问kafkaManager

  • 启动:(后台启动)
    ./kafka-manager -Dconfig.file=/export/servers/kafka-manager-1.3.3.7/conf/application.conf -Dhttp.port=8070 &

  • 查看:1)jps
    2)页面查看: http://192.168.52.200:8070/

  • 在页面配置kafka集群:

    • 出现的问题: 启动manager后出现如下信息。。。
      This application is already running (Or delete /export/servers/kafka-manager-1.3.0.7/RUNNING_PID file).
      解决办法:手 动kill掉kafka-mamager进程,然后 删除RUNNING_PID文件后再重新启动。

11、kafka为什么这么快:

  • kafka为什么快:
    1)顺序读写文件。比固态盘还快。普通的是随机存放。
    2)pageCache页缓存。消息先缓存到pageCache,然后达到一定量再写入磁盘。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章