百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

互联网公司必备的消息中间件、Kafka安装及快速入门

nanshan 2024-11-10 10:11 20 浏览 0 评论

今天带各位老铁对kafka入个门,kafka的集群搭建下,也不知道多少老铁使用过kafka。其实用过的老铁应该没多少。我相信大多老铁用过activeMq,rabbitMq或者rocketMq,这些都是java开发的比较传统的,而且用起来非常简单,结构没那么复杂。很多人都是写业务代码没接触过大数据量高并发的。之前说过rocketMq的历史,它的前身就是metaQ,metaQ来自哪里知道不老铁,其实就是借鉴了kafka,基本上metaQ的第一版就是超的kafka。2010年底kafka开源后,阿里立刻行动通过java模仿了一版kafka名字叫metaQ。作者的名字killme2008,目前在蚂蚁金服。



(一)kafka介绍

  • 官网

http://kafka.apache.org/



  • 历史

kafka历史

  1. 2010年底,开源到github,初始版本为0.7.0。
  2. 2011年7月因为备受关注,被纳入apache孵化器项目。
  3. 2012年10月,kafka从apache孵化器项目毕业,成为apache顶级项目。
  4. 2014年,jay kreps,neha narkhede,jun rao离开linkedin,成立confluent,此后linkedin和confluent成为kafka的核心贡组织,致力于将kafka推广应用。
  5. 目前最新版本:2.3.0
  • 介绍

Kafka是一种高吞吐量的分布式发布订阅消息系统,使用Scala编写。 scala也属于jvm系统的语言。scala需要寄居在java上运行的。

  1. 对于熟悉JMS(Java Message Service)规范的来说,消息系统已经不是什么新概念了(例如ActiveMQ是遵从JMS的规范,RabbitMQ是遵从AMQP的规范等)。
  2. Kafka拥有作为一个消息系统应该具备的功能,但是确有着独特的设计。可以这样来说,Kafka借鉴了JMS规范的思想,但是确并没有完全遵循JMS规范。
  • 基础术语
  1. Topic: Kafka按照Topic分类来维护消息。这个跟JMS的订阅者有些不同,理解为收发消息的主键。
  2. Producer: 我们将发布(publish)消息到Topic的进程称之为生产者(producer)。消息的发送者。
  3. Consumer:我们将订阅(subscribe)Topic并且处理Topic中消息的进程称之为消费者(consumer)。消费的消费者。
  4. Broker: Kafka以集群的方式运行,集群中的每一台服务器称之为一个代理(broker)。activeMQ有服务端,这个就类似kafka的一个节点的服务端。如果多个Broker,就可以组成一个kafka的集群。



  • Topic深入理解

Topic是一个类别的名称,所有的message发送到Topic下面。对于每一个Topic,kafka集群按照如下方式维护一个分区(Partition,可以将消息就理解为一个队列Queue)日志文件。



  1. 生产者发送消息。其实就是发送给Topic中的某个Partition分区,消费者消费Topic中的某个或者多个Partition分区的消息。某个Partition分区存储的就是咱们实打实的消息。每个Partition可以理解为一个简单的消息队列,生产者发送消息其实是往Partition的末尾发送消息的,最新的消息是发送尾部的,并且每个消息在每个Partition中都有一个唯一的标识符。消费者总是不从头部进行监听的,从old里面取监听消息。
  2. 传统的消息中间件,都是消费完直接就不存在了,其实kafka的消费方式不同,kafka有个消费偏移offset的概念,kafka是从偏移量开始往队列的尾部进行消费,在启动消费者如果上图Partition0的偏移量是3,就从3开始消费。每次消费完offset就+1,标识你这个消费者在某个分区消费的位置,下次消费是根据offset记录的位置继续去消费,不会重复消费。
  3. 注意:offset是跟消费者有关系的,也就是A消费者offset可能是5,B消费者的offset是从0开始的。也就是说分区是无状态的他跟消费者和生产者是松耦合的关系。也就是生产者只管放就可以了,让消费端来维护offset,这样才可以更好的满足高并发。
  4. Topic 其实是个抽象的东西,其实有用的还是里面的分区,分区实实在在存储消息的,一个分区可以理解为一个队列Queue。分区里面的消息不会一直存在的,kafka有个处理过期消息的时间设置,默认是2天时间,根据自我的消费时间,来设置过期时间,合理化的安排防止消息丢失,也可以增加kafka性能。

(二)kafka安装

  • 安装前的环境准备

由于Kafka是用Scala语言开发的,运行在JVM上,因此在安装Kafka之前需要先安装JDK。

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk*
cd jdk*
echo "export JAVA_HOME=/root/jdk1.8.0_141" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile



kafka依赖zookeeper,所以需要先安装zookeeper

# 一定要下载带bin的,不要下载不带bin的会爆:Could not find or load main class org.apache.zookeeper.server.quorum.QuorumP
cd /opt/
wget http://mirror.bit.edu.cn/apache/zookeeper/stable/apache-zookeeper-3.5.5-bin.tar.gz
tar -zxvf apache-zookeeper-3.5.5-bin.tar.gz
cd apache-zookeeper-3.5.5-bin
cp conf/zoo_sample.cfg conf/zoo.cfg

启动zookeeper

bin/zkServer.sh start conf/zoo.cfg &
bin/zkCli.sh 
ls /



  • 下载安装包

下载1.1.0 release版本

wget http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.2.1/kafka_2.12-2.2.1.tgz
tar -xzf kafka_2.12-2.2.1.tgz 
cd kafka_2.12-2.2.1



  • 修改host文件
hostname
vi /etc/hosts
#加入127.0.0.1 kafka



  • 启动服务
cd /opt/kafka_2.12-2.2.1
bin/kafka-server-start.sh -daemon config/server.properties
cd /opt/apache-zookeeper-3.5.5-bin
#我们进入zookeeper目录通过zookeeper客户端查看下zookeeper的目录树
 bin/zkCli.sh 
#查看zk的根目录kafka相关节点
ls / 
#查看kafka节点
ls /brokers/ids 




  • 创建主题

现在我们来创建一个名字为“test”的Topic,这个topic只有一个partition(实际上可以创建多个分区,你改成几就有几个分区),并且备份因子也设置为1,其实就是不做备份,因为就一个不是集群。会发现主题就是一个虚拟的概念,其实还是创建分区。

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



查看kafka中目前存在的topic

cd /opt/kafka_2.12-2.2.1
bin/kafka-topics.sh --list --zookeeper localhost:2181



在zookeeper中也添加了主题目录,看来kafka跟zookeeper简直是形影不离。



  • 发送消息

kafka自带了一个producer命令客户端,可以从本地文件中读取内容,或者我们也可以以命令行中直接输入内容,并将这些内容以消息的形式发送到kafka集群中。在默认情况下,每一个行会被当做成一个独立的消息。首先我们要运行发布消息的脚本,然后在命令中输入要发送的消息的内容



  • 消费消息

对于consumer,kafka同样也携带了一个命令行客户端,会将获取到内容在命令中进行输出。如果你是通过不同的终端窗口来运行以上的命令,你将会看到在producer终端输入的内容,很快就会在consumer的终端窗口上显示出来。

# 0.90版本之后启动消费者的方法--bootstrap-server 连接kafka的地址,之前的版本是--zookeeper 连接的是zookeeper的地址
cd /opt/kafka_2.12-2.2.1
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

当我们不携带任何参数运行命令的时候,将会显示出这个命令的详细用法。



一个发送,一个接收。



PS:kafka安装完毕了,也介绍了kafka的基本原理。

相关推荐

如何为MySQL服务器和客户机启用SSL?

用户想要与MySQL服务器建立一条安全连接时,常常依赖VPN隧道或SSH隧道。不过,获得MySQL连接的另一个办法是,启用MySQL服务器上的SSL封装器(SSLwrapper)。这每一种方法各有其...

Mysql5.7 出现大量 unauthenticated user

线上环境mysql5.7突然出现大量unauthenticateduser,进mysql,showprocesslist;解决办法有:在/etc/hosts中添加客户端ip,如192.16...

MySQL 在 Windows 系统下的安装(mysql安装教程windows)

更多技术文章MySQL在Windows系统下的安装1.下载mysql和Framework链接链接:百度网盘请输入提取码提取码:6w3p双击mysql-installer-communit...

MySql5.7.21.zip绿色版安装(mysql数据库绿色版安装)

1、去网上下载满足系统要求的版本(mysql-5.7.21-winx64.zip)2、直接解压3、mysql的初始化(1)以管理员身份运行cmd,在mysql中的bin目录下shift+右键-在...

MySQL(8.0)中文全文检索 (亲测有效)

在一堆文字中找到含有关键字的应用。当然也可以用以下语句实现:SELECT*FROM<表名>WHERE<字段名>like‘%ABC%’但是它的效率太低,是全盘扫描。...

新手教程,Linux系统下MySQL的安装

看了两三个教程。终于在哔哩哔哩找到一个简单高效的教程,成功安装,up主名叫bili逍遥bili,感兴趣可以去看看。下面这个是我总结的安装方法环境:CentOS764位1.下载安装包,个人觉得在...

麒麟服务器操作系统安装 MySQL 8 实战指南

原文连接:「链接」Hello,大家好啊,今天给大家带来一篇麒麟服务器操作系统上安装MySQL8的文章,欢迎大家分享点赞,点个在看和关注吧!MySQL作为主流开源数据库之一,被广泛应用于各种业务...

用Python玩转MySQL的全攻略,从环境搭建到项目实战全解析

这是一篇关于“MySQL数据库入门实战-Python版”的教程,结合了案例实战分析,帮助初学者快速掌握如何使用Python操作MySQL数据库。一、环境准备1.安装Python访问Pytho...

安装MySQL(中标麒麟 安装mysql)

安装MySQL注意:一定要用root用户操作如下步骤;先卸载MySQL再安装1.安装包准备(1)查看MySQL是否安装rpm-qa|grepmysql(2)如果安装了MySQL,就先卸载rpm-...

Mysql最全笔记,快速入门,干货满满,爆肝

目录一、MySQL的重要性二、MySQL介绍三、软件的服务架构四、MySQL的安装五、SQL语句六、数据库相关(DDL)七、表相关八、DML相关(表中数据)九、DQL(重点)十、数据完...

MAC电脑安装MySQL操作步骤(mac安装mysqldb)

1、在官网下载MySQL:https://dev.mysql.com/downloads/mysql/根据自己的macOS版本,选择适配的MySQL版本根据自己需求选择相应的安装包,我这里选择macO...

mysql主从(mysql主从切换)

1、本章面试题什么是mysql主从,主从有什么好处什么是读写分离,有什么好处,使用mycat如何实现2、知识点2.1、课程回顾dubboORM->MVC->RPC->SOApro...

【linux学习】以MySQL为例,带你了解数据库

做运维的小伙伴在日常工作中难免需要接触到数据库,不管是MySQL,mariadb,达梦还是瀚高等其实命令都差不多,下面我就以MySQL为例带大家一起来了解下数据库。有兴趣的小伙伴不妨评论区一起交流下...

玩玩WordPress - 环境简介(0)(玩玩网络科技有限公司)

简介提到开源博客系统,一般都会直接想到WordPress!WordPress是使用PHP开发的,数据库使用的是MySQL,一般会在Linux上运行,Nginx作为前端。这时候就需要有一套LNMP(Li...

服务器常用端口都有哪些?(服务器端使用的端口号范围)

下面为大家介绍一下,服务器常用的一些默认端口,以及他们的作用:  21:FTP服务所开放的端口,用于上传、下载文件。  22:SSH端口,用于通过命令行模式远程连接Linux服务器或vps。  23:...

取消回复欢迎 发表评论: