Kafka 分布式环境搭建

这篇文章将介绍如何搭建kafka环境,我们会从单机版开始,然后逐渐往分布式扩展。单机版的搭建官网上就有,比较容易实现,这里我就简单介绍下即可,而分布式的搭建官网却没有描述,我们最终的目的还是用分布式来解决问题,所以这部分会是重点。

Kafka的中文文档并不多,所以我们尽量详细点儿写。要交会你搭建分布式其实很简单,手把手的教程大不了我录个视频就好了,可我觉得那不是走这条 路的方 式。只有真正了解原理,并且理解的透彻了才能最大限度的发挥一个框架的作用。所以,如果你不了解什么事kafka,请先看:《kafka初步》

我们从搭建单机版的环境开始说起,如果你喜欢看英文版:这里有官方的《quick start》

单机版的部署很简单,我就讲几点比较重要的,首先kafka是用scala编写的,可以跑在JVM上,所以我们并不需要单独去搭建scala的环境,后面会涉及到编程的时候我们再说如何去配置scala的问题,这里用不到,当然你要知道这个是跑在linux上的。第二,我用的是最新版0.7.2的版本,你下载完kafka你可以打开它的目录浏览一下:

Kafka 分布式环境搭建

我就不介绍每个包里的内容是干嘛的,我就着重说一点,你在这个文件夹里只能找到3个jar包,并且这3个还不能用于后面的编程,而且你也没法在里面找到pom这样用于构建的xml。也别急,也别满世界找,这些依赖库得等你把它放到linux上才会出现(当然需要命令)。

搭建单机版环境,简单的说有那么几步:

1. 安装java环境,我用的是最新的版本jdk7的

2. 将下载下来的kafka扔到linux上,并解压。我用的red het server的linux。

3. 接下来就是下载kafka的依赖包和构建kafka的环境。注意,这一步需要电脑联网。具体命令就是官网介绍的./sbt update 和 ./sbt package。

4.  执行完上面这步大概会花个10多分钟吧,我在自己家里ubuntu没有成功,报了下载不到jline的错。单位里用虚拟机ubuntu成功了,我深刻怀疑是网的问题。上面这不执行完了有两点要注意,一是sbt帮你下载完了所有依赖库,但是这些jar都是分散在各个目录下的,注意区分。二是,这些jar一部分是kafka的编程包,一部分是scala的环境包,上面说了没必要自己去搭scala的环境道理就在这边,你自己去下一个2.9的scala,但人家kafka只支持2.8、2.7。所以编程的时候就用sbt给你下好的包即可。后面讲到编程的时候,会写怎么搭编程环境,很简单的。

上面的步骤都执行完了,环境算是好了,下面我们要测试下是否能成功运行kafka:

1.   启动zookeeper server :bin/zookeeper-server-start.sh ../config/zookeeper.properties  & (用&是为了能退出命令行)

2.    启动kafka server:  bin/kafka-server-start.sh ../config/server.properties  &

3.    Kafka为我们提供了一个console来做连通性测试,下面我们先运行producer:bin/kafka-console-producer.sh --zookeeper localhost:2181 --topic test 这是相当于开启了一个producer的命令行。命令行的参数我们一会儿再解释。

4.    接下来运行consumer,新启一个terminal:bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

5.    执行完consumer的命令后,你可以在producer的terminal中输入信息,马上在consumer的terminal中就会出现你输的信息。有点儿像一个通信客户端。

具体可看《quick start》

如果你能看到5执行了,说明你单机版部署成功了。下面解释下两条命令中参数的意思。--zookeeper localhost:2181 这个说明了去连本机2181端口的zookeeper server,--topic test,在kafka里,消息按topic来区分,我们这里的topic叫test,所以不管是consumer还是producer都指向了test。其他的参数,我就截图了,首先是producer的参数:

Kafka 分布式环境搭建

Consumer的参数:

Kafka 分布式环境搭建

这些参数你可以先看个大概,之后会在编程中使用到,都可以动态的配置。

好了单机版就部署完了,那是不是我把consumer的放到另一台机器上就算分布式了呢。是的,前提是,你还能运行到上面的第5步。在讲配置之前,我们还是将上篇写的分布式来回顾一下,当然我们简化一下情况,按照实际部署的分析:

Kafka 分布式环境搭建

假设我只有两台机器,server1和server2。我现在想把zookeeper server和kafka server 和producer都放在一台机器上server1,把consumer放在server2上。这当然也叫分布式了,虽然机子不多,但是这个部署成功了,扩展是相当的容易。

我们还是按照那5个步骤来做,当然你肯定能知道,3、4两步的参数要改了,我们假设server1的IP是192.168.10.11 server2的IP是192.168.10.10:

1.  启动zookeeper server :bin/zookeeper-server-start.sh ../config/zookeeper.properties  & (用&是为了能退出命令行)

2.  启动kafka server:  bin/kafka-server-start.sh ../config/server.properties  &

3.   Kafka为我们提供了一个console来做连通性测试,下面我们先运行producer:bin/kafka-console-producer.sh --zookeeper 192.168.10.11:2181 --topic test 这是相当于开启了一个producer的命令行。

4.   接下来运行consumer,新启一个terminal:bin/kafka-console-consumer.sh --zookeeper 192.168.10.11:2181 --topic test --from-beginning

5.   执行完consumer的命令后,你可以在producer的terminal中输入信息,马上在consumer的terminal中就会出现你输的信息。

这个时候你能执行出第5步的效果么,是不是报了下面的错了:

Kafka 分布式环境搭建

我来说原因,在这之前想请你再回去看看《kafka初步》,看看里面讲分布式的内容:

这里的kafka server就是broker,broker是存数据的,producer把数据给broker,consumer从broker取数据。那zookeeper是干嘛的,说的肤浅点儿,zookeeper就是他们之间的选择分发器,所有的连接都要先注册到zookeeper上。你可以把它想象成NIO,zookeeper就是selector,producer、consumer和broker都要注册到selector上,并且留下了相应的key。

所以问题就出在了kafka server的配置server.properties上。Kafka注册到zookeeper上的信息不对,才导致了上面的错误。我们看config中server.properties的配置就可以知道:


# Hostname the broker will advertise to consumers. If not set, kafka will use the value returned
# from InetAddress.getLocalHost().  If there are multiple interfaces getLocalHost
# may not be what you want.
#hostname=

默认的hostname如果你不设置,就是127.0.0.1,所以你把这个hostname设置成192.168.10.11即可,这样你重启下kafka server端,就能执行第5步了。

成功配置的话,你能看到下面的效果,左边的是producer,右边的是consumer,看最下面两行好了,前面的是我之前测试用过的:

Kafka 分布式环境搭建

如果你还是云里雾里的,建议你回头去看看上篇文章,将kafka分布式基本原理的,kafka实际操作是要建立在对原理熟悉的情况下的。

搭建完了环境,后面就要开始写程序去处理实际问题了。当然再写程序之前,下一篇我会先写一点 kafka为什么会有如此高的性能,它是怎么保障这些性能的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397035.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker Machine搭建并加入节点

对于集群服务器来讲,要在每台机器上手动安装Docker是一件及其痛苦的事情,还好有Docker Machine这一工具,Docker三剑客中的一角. 一、Docker Machine介绍 这个工具已经出了比较久了,Docker Machine官方介绍:https://doc…

ASPNET5的依赖注入

ASP.NET5设计的时候就是以DI为基础的,它可以利用内建的框架在Startup类的方法中,把依赖注入进去。应用服务也可以被配置的注入。默认的服务容器提供一些基本的功能,它并不打算代替现代主流的DI框架。 1. 什么是Dependency Injection? DI的概…

java 权限控制 demo_Java-访问控制权限

Java面向对象-访问控制权限Java中,可以通过一些Java关键字,来设置访问控制权限;主要有 private(私有), package(包访问权限),protected(子类访问权限),public(公共访问权限)privatepackageprotectedpublic同…

《未来世界的幸存者》笔记

https://ruanyf.github.io/survivor/ 这两天一直在上下班途中,读阮一峰的这本书 《未来世界的幸存者》。还是有不少感慨的。做一下记录。 未来人类社会的形态,将发生颠覆性的变化。旧的社会结构已经在崩溃了,但社会底层的机会变得更少了&…

python类中没有属性_如何在python语言中在类中删除属性和添加属性

在python语言中的类,可以使用class定义类,调用__init__方法进行初始化;默认传入self,可以在后面在添加几个属性。可以使用setattr()添加属性,也可以使用delattr()删除属性。下面利用几个实例说明这两个方法的用法&…

mysql 数据复制停止工作_linux – Mysql GTID复制停止工作

我在主服务器和从服务器之间设置了mysql gtid复制.有趣的是,我发现复制在几分钟后停止工作,我必须使用stop slave并启动slave来重启mysql复制.谁能告诉我是什么原因导致这个问题?改变奴隶主:mysql> change master to-> master_host master.com,-&…

python学生管理系统gui版好例子网_python图书管理系统gui 相关实例(示例源码)下载 - 好例子网...

开发语言:Python | 大小:19.05M | 发布时间:2019-05-27 | 发布人:李易峰 相关标签: 立即下载 开发语言:Python | 大小:0.21M | 发布时间:2020-08-23 | 发布人:聂嘉辉 相关…

COM组件的运行机制

COM组件的运行机制  构造一个创建COM组件的最小框架结构    IUnknown *pUnkNULL;    IObject *pObjectNULL;    CoInitialize(NULL);    CoCreateInstance(CLSID_Object, CLSCTX_INPROC_SERVER, NULL, IID_IUnknown, (void**)&pUnk);    pUnk->Qu…

申请去国外读博士

必须要做的事情是: 考过GRE和TOEFL 准备推荐信 个人CV 联系导师一般就是发邮件 转载于:https://www.cnblogs.com/zhulinmails/p/5078695.html

动态编译

下面的demo就涵盖了动态编译和运行类的过程 package 动态编译; import java.lang.reflect.Method;import java.net.URL;import java.net.URLClassLoader; import javax.tools.JavaCompiler;import javax.tools.ToolProvider; public class Demo { public static void main(Stri…

python怎么打开spyder_Python开发环境Spyder安装方法

Spyder(Scientific PYthon Development EnviRonment)是一个强大的交互式 Python 语言开发环境,提供高级的代码编辑、交互测试、调试等特性,支持包括 Windows、Linux 和 OS X 系统。 本文在只安装过python2.7的Win7环境下进行安装Spyder,其他环…

矩阵、向量求导法则

复杂矩阵问题求导方法:可以从小到大,从scalar到vector再到matrix。 x is a column vector, A is a matrix practice: 转载于:https://www.cnblogs.com/vincentQin/p/5406010.html

java字符函数_java字符串函数用法汇总

替换字符串中的字符例如有如下x的字符串String x "[kllkklk\kk\kllkk]";要将里面的“kk”替换为,可以使用两种方法得到相同的结果replace(CharSequence target, CharSequence replacement) —— x.replace("kk", "")replaceAll(Stri…

[Vue]Scoped Css与Css Modules的区别

均为解决CSS全局作用域问题&#xff08;样式冲突&#xff08;污染&#xff09;&#xff09;的一个解决方案。 1.Scoped CSS 当 <style> 标签有 scoped 属性时&#xff0c;相当于在元素中添加了一个唯一属性用来区分。 <style scoped> .example {color: red; } <…

mysql数据库-mysql数据定义语言DDL (Data Definition Language)归类(六)

0x01 创建数据库并指定字符集和排序规则 -- 三种实例写法 create database temptab2 character set utf8 collate utf8_general_ci; create database temptab3 charset utf8 collate utf8_general_ci; create database temptab4 character setutf8 collate utf8_general_ci; 查…

vue antd admin怎么切换到basic分支_vue菜鸟从业记:前端如何与后端哥们进行接口联调...

最近我的朋友王小闰进入一家新的公司&#xff0c;正好公司项目采用的是前后端分离架构&#xff0c;技术栈是王小闰非常熟悉的vue全家桶&#xff0c;后端用的是Java语言。在前后端开发人员碰面之后&#xff0c;协商确定好了前端需要的数据接口(扯那么多&#xff0c;其实也就是关…

ASP.NET AntiXSS的作用

XSS跨站脚本攻击是指用户输入HTML编码对网站进行跨站攻击。通过使用FCKeditor、FreeTextBox、Rich TextBox、Cute Editor、TinyMCE等等Html编辑器&#xff0c;用户可以输入一些危险字符&#xff0c;注入到网站中&#xff0c;形式XSS。&#xff08;一般的解决办法是使用BBCode的…

p1358

这是一道二维树状数组模板题。 需要注意的可能只有这些xy有可能为零。那每次输入之后全部&#xff0c;相当于全部向右下角移了一位。 那就直接给代码了呦。 using namespace std; int c[1050][1050],n,m; int i,f; int a1,b1,a2,b2,tx,ty,tk; int ans; int lowbit(int x) {retu…

java中对象的生存期_深入理解Java虚拟机-判断对象是否存活算法与对象引用

我们知道Java中的对象一般存放在堆中&#xff0c;但是总不能让这些对象一直占着内存空间&#xff0c;这些对象最终都会被回收并释放内存&#xff0c;那么我们如何判断对象已经成为垃圾呢&#xff1f;这篇文章会提出两种算法解决这个问题。另外&#xff0c;本文还要谈一谈对象引…

大数据高效复制的处理案例分析总结

一个老客户提出这样的需求&#xff0c;希望将SQLServer中的某个表的数据快速复制到SQLite数据库里面以便进行定期的备份处理&#xff0c;数据表的记录大概有50多万条记录&#xff0c;表有100个字段左右&#xff0c;除了希望能够快速做好外&#xff0c;效率是第一位的&#xff0…