消息队列KafKa的集群部署

简介: 🍅程序员小王的博客:程序员小王的博客🍅 欢迎点赞 👍 收藏 ⭐留言 📝🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕🍅java自学的学习路线:java自学的学习路线

Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

Kafka对消息保存时根据Topic进行归类,发送消息者成为Producer,消息接受者成为Consumer,此外Kafka集群有多个Kafka实例组成,每个实例(server)成为broker。无论是Kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息。

一、消息队列

1、为什么要有消息队列


2、什么是消息队列

MQ(Message Quene) : 翻译为 消息队列,通过典型的 生产者和消费者模型,生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,轻松的实现系统间解耦。别名为 消息中间件 通过利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。


  • 消息 Message

网络中的两台计算机或者两个通讯设备之间传递的数据。例如说:文本、音乐、视频等内容。


  • 队列 Queue

一种特殊的线性表(数据元素首尾相接),特殊之处在于只允许在首部删除元素和在尾部追加元素(FIFO)。入队、出队。


  • 消息队列 MQ

消息+队列,保存消息的队列。消息的传输过程中的容器;主要提供生产、消费接口供外部调用做数据的存储和获取。


3、消息中间件的分类

当今市面上有很多主流的消息中间件,如老牌的 ActiveMQ 、 RabbitMQ ,炙手可热的Kafka ,阿里巴巴自主开发 RocketMQ 等。


Redis 基于Key-Value对的NoSQL数据库,同时支持MQ功能,可做轻量级队列服务使用。就入队操作而言,Redis对短消息(小于10kb)的性能比RabbitMQ好,长消息性能比RabbitMQ差


Kafka/Jafka 高性能跨语言的分布式发布/订阅消息系统,数据持久化,全分布式,同时支持在线和离线处理


RabbitMQ Erlang编写,支持多协议AMQP,XMPP,SMTP,STOMP。支持负载均衡、数据持久化。同时支持Peer-to-Peer和发布/订阅模式。


RabbitMQ前期我已经写过博客:

🍅基础版本:RabbitMQ安装以及消息模型使用攻略

🍅SpringBoot版本:SpringBoot中使用RabbitMQ


4、消息队列的分类

MQ主要分为两类:点对点(p2p),发布订阅(Pub/Sub

  • Peer-to-Peer 一般基于Pull或者Polling接收数据 发送到队列中的消息被一个而且仅仅一个接收者所接受,即使有多个接收者在同一个队列中侦听同一消息 即支持异步“即发即收”的消息传递方式,也支持同步请求/应答传送方式

  • 发布订阅 发布到同一个主题的消息,可被多个订阅者所接收 发布/订阅即可基于Push消费数据,也可基于Pull或者Polling消费数据 解耦能力比P2P模型更强

5、p2p和发布订阅MQ的比较

  • 共同点
    消息生产者生产消息发送到queue中,然后消息消费者从queue中读取并且消费消息。
  • 不同点
1. P2P模型包括:消息队列(Queue),发送者(Sender)、接收者(Recevier)
   一个生产者生产的消息只有一个消费者(Consumer)(即一旦被消费,消息就不在消息队列中)。比如说打电话。
2.pub/Sub包含:消息队列(Queue)、主题(Topic)、发布者(Publisher)、订阅者(Subscriber)
   每个消息可以有多个消费者,彼此互不影响。比如我发布一个微博:关注我的人都能够看到。

6、消息队列的使用场景

  • 解耦 :各系统之间通过消息系统这个统一的接口交换数据,无须了解彼此的存在
  • **冗余 **:部分消息系统具有消息持久化能力,可规避消息处理前丢失的风险
  • 扩展 :消息系统是统一的数据接口,各系统可独立扩展
  • 峰值处理能力 消息系统可顶住峰值流量,业务系统可根据处理能力从消息系统中获取并处理对应量的请求
  • **可恢复性 **系统中部分键失效并不会影响整个系统,它恢复会仍然可从消息系统中获取并处理数据
  • **异步通信 **在不需要立即处理请求的场景下,可以将请求放入消息系统,合适的时候再处理

二、KafKa简介

1、什么是KafKa

Kafka是分布式的发布——订阅消息系统,它最初由LinkedIn(领英)公司发布,使用Scala语言编写,与2010年12月份开源,成为Apache的顶级项目。Kafka是一个高吞吐量的、持久性的、分布式发布订阅消息系统。它主要用于处理活跃live的数据(登录、浏览、点击、分享、喜欢等用户行为产生的数据)。

三大特点:

  • 高吞吐量

可以满足每秒百万级别消息的生产和消费——生产消费。

  • 持久性

有一套完善的消息存储机制,确保数据的高效安全的持久化——中间存储。

  • 分布式

基于分布式的扩展和容错机制;Kafka的数据都会复制到几台服务器上。当某一台故障失效时,生产者和消费者转而使用其它的机器——整体

  • 健壮性

2、设计目标

  • 高吞吐率 在廉价的商用机器上单机可支持每秒100万条消息的读写
  • 消息持久化 所有消息均被持久化到磁盘,无消息丢失,支持消息重放
  • 完全分布式 Producer,Broker,Consumer均支持水平扩展
  • 同时适应在线流处理和离线批处理

3、Kafka核心的概念

(1)一个消息队列需要哪些部分呢?

生产、消费、消息类别、存储等等。 对于kafka而言,kafka服务就像是一个大的水池。不断的生产、存储、消费着各种类别的消息。

(2)那么kafka由何组成呢?

  • Kafka服务:
1. Topic:主题,Kafka处理的消息的不同分类。
2. Broker:消息服务器代理,Kafka集群中的一个kafka服务节点称为一个broker,主要存储消息数据。存在硬
           盘中。每个topic都是有分区的。
3. Partition:Topic物理上的分组(part划分),一个topic在broker中被分为1个或者多个partition,分区在创建topic的时候
指定。
4. Message:消息,是通信的基本单位,每个消息都属于一个partition

Kafka服务相关:

1. Producer:消息和数据的生产者,向Kafka的一个topic发布消息。
2. Consumer:消息和数据的消费者,定于topic并处理其发布的消息。
3. Zookeeper:协调kafka的正常运行。

三、KafKa的分布式安装(部署三台)

1、版本下载

2、安装Kafka的相关前提

(1)安装jdk

  • 前提:由于Kafka是用Scala语言开发的,运行在JVM上,因此在安装Kafka之前需要先安装JDK。
yum install java-1.8.0-openjdk* -y

(2)安装Zookeeper

  • kafka之前的版本依赖zookeeper,所以需要先安装zookeeper,现在kafka最新版本不在依赖于zk了!!!但是我们目前的kafka是需要zookeeper的
  • centos7安装zookeeper3.4.12集群
  • 将某台的zookper移动到另外一台linux上
scp -r /usr/soft/apache-zookeeper-3.6.3/  192.168.5.130:/usr/soft/

集群配置

dataDir=/usr/soft/apache-zookeeper-3.6.3/data
dataLogDir=/usr/soft/apache-zookeeper-3.6.3/log
server.1=192.168.5.128:2888:3888
server.2=192.168.5.130:2888:3888
server.3=192.168.5.131:2888:3888

3、安装过程

  • 从官网下载一个Kafka稳定版本,这里采用的是Kafka 2.11-1.1.1版本 Apache Kafka
  • 解压文件:tar -zxvf kafka_2.11-1.1.1.tgz
  • (1)解压
[root@localhost soft]# tar -zxvf  kafka_2.11-1.1.1.tgz -C /usr/apps/

2)重命名

mv kafka_2.11-1.1.1 /usr/apps/kafka

(3)添加环境变量(这个文件最初是没有的)

 vim /etc/profile.d/hadoop-etc.sh
export KAFKA_HOME=/usr/apps/kafka 
export PATH=$PATH:$KAFKA_HOME/bin

  • 更新 source /etc/profile.d/hadoop-etc.sh

(4)配置

  • 修改/usr/apps/kafka/config/server.properties
1. vim /usr/apps/kafka/config/server.properties

 

## 当前kafka实例的id,必须为整数,一个集群中不可重复 
broker.id=0
## 生产到kafka中的数据存储的目录,目录需要手动创建
log.dirs=/usr/apps/data/kafka
## kafka数据在zk中的存储目录
zookeeper.connect=1192.168.5.128:2181
 #设置zookeeper的连接端口
zookeeper.connect=192.168.5.128:2181,192.168.5.130:2181,192.168.5.131:2181
#设置zookeeper的连接超时时间
 zookeeper.connection.timeout.ms=6000

 

  • 在bin/kafka-server-start.sh文件中,设置服务器可用内存大小,内存不足时,启动会报:error='Cannot allocate memory'
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"

分发安装包到另外两个虚拟机

1. scp -r /usr/apps/kafka/ 192.168.5.130:/usr/apps/kafka
2. scp -r /usr/apps/kafka/ 192.168.5.131:/usr/apps/kafka


修改192.168.5.130,192.168.5.131节点kafka配置文件conf/server.properties里面的broker.id和listeners的值分别为去1,2

image.png

四、Kafka集群启动

1、执行脚本启动zookeeper

  • 所有zookeeper节点都需要执行
zkServer.sh start

  • 显示以下信息表示启动正常

2、后台启动Kafka集群服务

  • 所有Kafka节点都需要执行
[root@localhost kafka]# ./bin/kafka-server-start.sh config/server.properties &


  • 启动成功

相关文章
|
2月前
|
消息中间件 存储 缓存
Kafka【基础知识 01】消息队列介绍+Kafka架构及核心概念(图片来源于网络)
【2月更文挑战第20天】Kafka【基础知识 01】消息队列介绍+Kafka架构及核心概念(图片来源于网络)
153 2
|
2月前
|
消息中间件 分布式计算 监控
Python面试:消息队列(RabbitMQ、Kafka)基础知识与应用
【4月更文挑战第18天】本文探讨了Python面试中RabbitMQ与Kafka的常见问题和易错点,包括两者的基础概念、特性对比、Python客户端使用、消息队列应用场景及消息可靠性保证。重点讲解了消息丢失与重复的避免策略,并提供了实战代码示例,帮助读者提升在分布式系统中使用消息队列的能力。
75 2
|
2月前
|
消息中间件 监控 大数据
Kafka消息队列架构与应用场景探讨:面试经验与必备知识点解析
【4月更文挑战第9天】本文详尽探讨了Kafka的消息队列架构,包括Broker、Producer、Consumer、Topic和Partition等核心概念,以及消息生产和消费流程。此外,还介绍了Kafka在微服务、实时数据处理、数据管道和数据仓库等场景的应用。针对面试,文章解析了Kafka与传统消息队列的区别、实际项目挑战及解决方案,并展望了Kafka的未来发展趋势。附带Java Producer和Consumer的代码示例,帮助读者巩固技术理解,为面试做好准备。
52 0
|
3天前
|
消息中间件 Java Kafka
使用Spring Boot和Kafka实现高效消息队列
使用Spring Boot和Kafka实现高效消息队列
|
27天前
|
消息中间件 存储 缓存
消息队列之 MetaQ 和 Kafka 哪个更香!
本篇文章首先介绍了MetaQ消息队列,然后介绍了作者对MetaQ和Kafka这两个消息队列的理解。
|
19天前
|
消息中间件 监控 Java
Java一分钟之-Kafka:分布式消息队列
【6月更文挑战第11天】Apache Kafka是一款高性能的消息队列,适用于大数据处理和实时流处理,以发布/订阅模型和分布式设计处理大规模数据流。本文介绍了Kafka基础,包括生产者、消费者、主题和代理,以及常见问题:分区选择、偏移量管理和监控不足。通过Java代码示例展示了如何创建生产者和消费者。理解并妥善处理这些问题,结合有效的监控和配置优化,是充分发挥Kafka潜力的关键。
19 0
|
2月前
|
消息中间件 存储 传感器
Kafka消息队列原理及应用详解
【5月更文挑战第6天】Apache Kafka是高性能的分布式消息队列,常用于实时数据管道和流应用。它提供高性能、持久化、分布式和可伸缩的消息处理,支持解耦、异步通信和流量控制。Kafka的核心概念包括Broker、Topic、Partition、Producer、Consumer和Consumer Group。其特点是高吞吐、低延迟、数据持久化、分布式架构和容错性。常见应用包括实时数据流处理、日志收集、消息传递和系统间数据交换。
|
2月前
|
消息中间件 存储 Java
深度探索:使用Apache Kafka构建高效Java消息队列处理系统
【4月更文挑战第17天】本文介绍了在Java环境下使用Apache Kafka进行消息队列处理的方法。Kafka是一个分布式流处理平台,采用发布/订阅模型,支持高效的消息生产和消费。文章详细讲解了Kafka的核心概念,包括主题、生产者和消费者,以及消息的存储和消费流程。此外,还展示了Java代码示例,说明如何创建生产者和消费者。最后,讨论了在高并发场景下的优化策略,如分区、消息压缩和批处理。通过理解和应用这些策略,可以构建高性能的消息系统。
|
2月前
|
消息中间件 大数据 Kafka
Kafka与大数据:消息队列在大数据架构中的关键角色
【4月更文挑战第7天】Apache Kafka是高性能的分布式消息队列,常用于大数据架构,作为实时数据管道汇聚各类数据,并确保数据有序传递。它同时也是数据分发枢纽,支持多消费者订阅,简化系统集成。Kafka作为流处理平台的一部分,允许实时数据处理,满足实时业务需求。在数据湖建设中,它是数据入湖的关键,负责数据汇集与整理。此外,Kafka提供弹性伸缩和容错保障,适用于微服务间的通信,并在数据治理与审计中发挥作用。总之,Kafka是现代大数据体系中的重要基础设施,助力企业高效利用数据。
80 1
|
2月前
|
消息中间件 存储 运维

热门文章

最新文章

相关产品

  • 云消息队列 Kafka 版