欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-26 22:33:29
...

目录:

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,然后达到一定量再写入磁盘。
相关标签: kafka