Kafka

  • 用途:在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算。
  • Kafka是一个分布式消息队列。Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker。无论是kafka集群,还是producer和consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性。

消息队列内部实现原理

  • <1>. 点对点模式(类似接受文件,一对一,消费者主动拉取数据,消息收到后消息清除)

    -点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息推送到客户端。这个模型的特点是发送到队列的消息被一个且只有一个接收者接收处理,即使有多个消息监听者也是如此。

    <2>. 发布/订阅模式(类似公众号,一对多,数据生产后,推送给所有订阅者)
  • 发布订阅模型则是一个基于推送的消息传送模型。发布订阅模型可以有多种不同的订阅者,临时订阅者只在主动监听主题时才接收消息,而持久订阅者则监听主题的所有消息,即使当前订阅者不可用,处于离线状态。

Kafka架构

  • Producer:**消息生产者,就是向kafka broker发消息的客户端。
  • Consumer:**消息消费者,向kafka broker取 消息的客户端
  • Topic:**可以理解为一个队列。
  • Consumer Group(CG):**消费者组,kafka提供的可扩展且具有容错性的消费者机制。既然是一个组,那么组内必然可以有多个消费者或消费者实例(consumer instance),它们共享一个公共的ID,即group ID。组内的所有消费者协调在一起来消费订阅主题(subscribed topics)的所有分区(partition)。当然,每个分区只能由同一个消费组内的一个consumer来消费。
  • Broker:**一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。
  • Partition:**为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序。
  • Offset:**kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。当然the first offset就是00000000000.kafka



Kafka安装前提,需要有Java环境以及zookeeper集群。

三台服务器地址:

192.168.11.x1 alary001

192.168.11.x2 alary002

192.168.11.x3 alary003

一、下载Kafka安装包

第一次学习时,还在网上找各种下载地址以及去官网下载,发现各种麻烦和不靠谱,后来慢慢学会,

可以通过国内的各个镜像站进行下载,

清华大学开源软件镜像站——Apach下相关软件

找到Kafka,下载对应版本即可。

下载好后,将kafka的tar.gz安装包通过rz kafka-xxxx.tar.gz文件传至服务器。

二、Kafka安装包的解压

进入到kafka的kakfa-xxx.tar.gz的目录下,解压文件:

tar -zxvf kafka-xxx.tar.gz

可以将kafka-xxx进行更名:

mv kafka-xxx kafka

三、设置环境变量

进入 /etc/profile配置环节变量

vi /etc/profile
# set environment virables
export KAFKA_HOME=/home/hadoop/app/kafka
export PATH=$KAFKA_HOME/bin:$PATH

重启环境变量配置信息:

source /etc/profile

四、配置kafka文件

进入kafka配置文件目录:

cd /home/hadoop/kafka/config/

通过ll或者ls查看目录下的文件。

4.1 server.properties

首先,我们来修改server.properties这个配置文件

配置内容如下:

broker.id=1 #当前机器在集群中的唯一标识,和zookeeper的myid性质一样

listeners=PLAINTEXT://10.1.32.85:9092 #kafka监听地址

num.network.threads=3 #这个是borker进行网络处理的线程数

num.io.threads=8 #这个是borker进行I/O处理的线程数

socket.send.buffer.bytes=102400 #发送缓冲区buffer大小,数据不是一下子就发送的,先回存储到缓冲区了到达一定的大小后在发送,能提高性能

socket.receive.buffer.bytes=102400 #kafka接收缓冲区大小,当数据到达一定大小后在序列化到磁盘

socket.request.max.bytes=104857600 #这个参数是向kafka请求消息或者向kafka发送消息的请请求的最大数,这个值不能超过java的堆栈大小

log.dirs=/tmp/kafka-logs #消息存放的目录,这个目录可以配置为“,”逗号分割的表达式,上面的num.io.threads要大于这个目录的个数这个目录,如果配置多个目录,新创建的topic他把消息持久化的地方是,当前以逗号分割的目录中,那个分区数最少就放那一个

num.partitions=1 #默认的分区数,一个topic默认1个分区数

num.recovery.threads.per.data.dir=1

log.retention.hours=168 #默认消息的最大持久化时间,168小时,7天

message.max.byte=5242880

default.replication.factor=2

replica.fetch.max.bytes=5242880

log.segment.bytes=1073741824 #这个参数是:因为kafka的消息是以追加的形式落地到文件,当超过这个值的时候,kafka会新起一个文件

log.retention.check.interval.ms=300000 #每隔300000毫秒去检查上面配置的log失效时间(log.retention.hours=168 ),到目录查看是否有过期的消息如果有,删除

zookeeper.connect=10.1.32.85:2181,10.1.32.193:2181,10.1.32.161:2181 #设置zookeeper的连接端口

zookeeper.connection.timeout.ms=6000 #连接zookeeper的超时时间

之前第一个配置时,遇到一个坑,直接在配置后面加注释,如:

zookeeper.connection.timeout.ms=6000 #连接zookeeper的超时时间

在解析配置文件时,会报错无法识别后面的汉字等内容,所以讲所有注释全部换行 注释,如下:

zookeeper.connection.timeout.ms=6000
#连接zookeeper的超时时间

即可解决问题;

server.propertis配置:

broker.id=1
#每台服务器的broker.id都不能相同
listeners=PLAINTEXT://192.19.11.x1:9092
#在log.retention.hours=168下面新增下面三项
message.max.byte=5242880
default.replication.factor=2
replica.fetch.max.bytes=5242880
zookeeper.connect=alary001:2181,alary002:2181,alary003:2181
#设置zookeeper的连接端口

此处,要想直接通过hostname来访问,需要配置host信息。

vi /etc/hosts

192.168.11.x1 alary001
192.168.11.x2 alary002
192.168.11.x3 alary003

配置完第一台机器alary001后,通过scp 将第一台机器的kakfa分发给其他机器,并修改相关内容。

五、启动kafka集群并测试

启动kafka必须三台都启动,如果是通过xshell进行练习时,可以通过在xshell中鼠标右键,发送键输入到所有会话,即可同时启动kafka。

kafka启动命令:

kafka-server-start.sh -daemon /home/hadoop/kafka/config/server.properties

通过jps命令来检查服务是否启动:

5.1创建Topic

kafka-topics.sh --create --zookeeper alary001:2181 --replication-factor 2 --partitions 1 --topic lujin
#--replication-factor 2
#复制两份
#--partitions 1
#创建1个分区
# --topic
#主题名称

5.2创建broker

在kafka的发布机器(alary001)创建一个broker:

kafka-console-producer.sh --broker-list alary001:9092 --topic lujin

5.3创建订阅者

另外的其他机器上,创建订阅者:

kafka-console-consumer.sh --zookeeper alary002:2181 --topic lujin --from-beginning

若通过发布者发送的消息,订阅者成功收到,则kafka集群搭建完毕!

六、kafka常用命令

6.1创建主题(4个分区,2个副本)

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 4 --topic test

6.2查询

查询集群描述

bin/kafka-topics.sh --describe --zookeeper

消费者列表查询

bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --list

新消费者列表查询(支持0.9版本+)

bin/kafka-consumer-groups.sh --new-consumer --bootstrap-server localhost:9092 --list

显示某个消费组的消费详情(仅支持offset存储在zookeeper上的)

bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --zookeeper localhost:2181 --group test

显示某个消费组的消费详情(支持0.9版本+)

bin/kafka-consumer-groups.sh --new-consumer --bootstrap-server localhost:9092 --describe --group test-consumer-group

6.3发送和消费

生产者

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

消费者

bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test

6.4平衡leader

bin/kafka-preferred-replica-election.sh --zookeeper zk_host:port/chroot

6.5kafka自带压测命令

bin/kafka-producer-perf-test.sh --topic test --num-records 100 --record-size 1 --throughput 100 --producer-props bootstrap.servers=localhost:9092

(Linux环境Kafka集群安装配置及常用命令的更多相关文章

  1. zookeeper和Kafka集群安装配置

    3个虚拟机,首先关闭防火墙,在进行下面操作 一.java环境 yum list java* yum -y install java-1.8.0-openjdk* 查看Java版本 Java -vers ...

  2. kafka集群安装配置

    1.下载安装包 2.解压安装包 3.进入到kafka的config目录修改server.properties文件 进入后显示如下: 修改log.dirs,基本上大部分都是默认配置 kafka依赖zoo ...

  3. CentOS6安装各种大数据软件 第五章:Kafka集群的配置

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  4. KafKa集群安装、配置

    一.事前准备 1.kafka官网:http://kafka.apache.org/downloads. 2.选择使用版本下载. 3.kafka集群环境准备:(linux) 192.168.145.12 ...

  5. hbase单机环境的搭建和完全分布式Hbase集群安装配置

    HBase 是一个开源的非关系(NoSQL)的可伸缩性分布式数据库.它是面向列的,并适合于存储超大型松散数据.HBase适合于实时,随机对Big数据进行读写操作的业务环境. @hbase单机环境的搭建 ...

  6. Kafka 集群安装

    Kafka 集群安装 环境: Linux 7.X kafka_2.x 在linux操作系统中,kafka安装在 /u04/app目录中 1. 下载 # wget https://mirrors.cnn ...

  7. CentOS下Hadoop-2.2.0集群安装配置

    对于一个刚开始学习Spark的人来说,当然首先需要把环境搭建好,再跑几个例子,目前比较流行的部署是Spark On Yarn,作为新手,我觉得有必要走一遍Hadoop的集群安装配置,而不仅仅停留在本地 ...

  8. spark集群安装配置

    spark集群安装配置 一. Spark简介 Spark是一个通用的并行计算框架,由UCBerkeley的AMP实验室开发.Spark基于map reduce 算法模式实现的分布式计算,拥有Hadoo ...

  9. zookeeper+kafka集群安装之二

    zookeeper+kafka集群安装之二 此为上一篇文章的续篇, kafka安装需要依赖zookeeper, 本文与上一篇文章都是真正分布式安装配置, 可以直接用于生产环境. zookeeper安装 ...

随机推荐

  1. 使用node+puppeteer+express搭建截图服务

    使用node+puppeteer+express搭建截图服务 转载请注明出处https://www.cnblogs.com/funnyzpc/p/14222807.html 写在之前 一开始我们的需求 ...

  2. 文本单词one-hot编码

    单词->字母->向量 神经网络是建立在数学的基础上进行计算的,因此对数字更敏感,不管是什么样的特征数据都需要以向量的形式喂入神经网络,无论是图片.文本.音频.视频都是一样. one-hot ...

  3. mysql 双主复制 centos7

    mysql 安装请看:http://www.cnblogs.com/leohe/p/6839705.html 双主复制设置 1. 两台虚拟机,都是 centos7 主: 10.1.1.115 从: 1 ...

  4. 关于IP的相关计算

    不论是考研还是考各种计算机类的证,大家或多或少都会遇到网络部分的一种题型,大体的归类就是以下几种: 已知一个IP是192.XX.XX.XX,子网掩码是255.255.255.0,那么它的网络地址是多少 ...

  5. Beta冲刺——第十天(补发)

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 这个作业要求在哪里 https://edu.cnblogs.com/campus/fz ...

  6. 离散傅里叶变换DFT入门

    网上对于傅里叶变换相关的文章很多(足够多),有的是从物理相关角度入场,有的从数学分析角度入场.对于有志学习相关概念的同学还是能够很好的理解的. 数学包括三大块:代数学.几何.数学分析.前两块我们在中学 ...

  7. [C#.NET 拾遗补漏]14:使用结构体实现共用体

    在 C 和 C# 编程语言中,结构体(Struct)是值类型数据结构,它使得一个单一变量可以存储多种类型的相关数据.在 C 语言中还有一种和结构体非常类似的语法,叫共用体(Union),有时也被直译为 ...

  8. 怎么启用apache的mod_log_sql模块将所有的访问信息直接记录在mysql中

    怎么启用apache的mod_log_sql模块将所有的访问信息直接记录在mysql中

  9. C语言补码(C语言学习笔记)

    记录 在学习C语言数据范围时了解到了补码的概念,记录一下什么是补码,补码怎么运算的 运算 原文链接:https://www.cnblogs.com/lsgsanxiao/p/5113305.html ...

  10. pandas DataFrame的新增行列,修改、删除、筛选、判断元素以及转置操作

    1)指定行索引和列索引标签 index 属性可以指定 DataFrame 结构中的索引数组,  columns 属性可以指定包含列名称的行, 而使用 name 属性,通过对一个 DataFrame 实 ...