【原创】从零开始搭建开发使用的Kafka环境

入门资料

  1. 百度百科:

    Kafka是一种高吞吐量的分布式发布订阅消息系统,这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消费。

  2. 归属公司

    Apache Kafka

    软件语言:scala

  3. 相关术语介绍

  • Broker: Kafka集群包含一个或多个服务器,这种服务器被称为broker[
  • Topic:每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
  • Partition:Partition是物理上的概念,每个Topic包含一个或多个Partition.
  • Producer:赋值发布消息到负责发布消息到Kafka broker(生产者)
  • Consumer:消息消费者,向Kafka broker读取消息的客户端。
  • Consumer Group:每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。

目标以及流程:

  1. 单机搭建kafka
  2. 集群搭建kafka(下一步)
  3. 搭建kafka控制台(下一步)

kafka控制台选型:

  1. Kafka Web Console
  2. Kafka Manager
  3. KafkaOffsetMonitor

    比较:

    若只需要监控功能,推荐使用KafkaOffsetMonito,若偏重Kafka集群管理,推荐使用Kafka Manager。

    因为都是开源程序,稳定性欠缺。故需先了解清楚目前已存在哪些Bug,多测试一下,避免出现类似于Kafka Web Console的问题。

开始单机搭建kafka:

  1. 官网:http://kafka.apache.org/intro
  2. 学习官方网站的快速启动教程:http://kafka.apache.org/quickstart
  3. 官网的教程比较有服务器上的测试

开始前的备注

# 查看防火墙状态
systemctl status firewalld
# 关闭防火墙
service firewalld stop
# 启动防火墙
service firewalld start

首先要确认你已经安装了java环境

# 检查java的命令
java -version

1:下载kafka并解压

# 获取kafka最新安装包,这边使用的是镜像地址,可以去官方网站获得最新地址
wget http://mirrors.hust.edu.cn/apache/kafka/0.11.0.1/kafka_2.11-0.11.0.1.tgz
# 解压程序
tar -xzf kafka_2.11-0.11.0.1.tgz
# 进入目录
cd kafka_2.11-0.11.0.1

配置对应的配置文件,server.properties

# 配置服务器zk地址
zookeeper.connect=localhost:2181
# 配置内网绑定关系
listeners=PLAINTEXT://<your.ip>:9092
# 配置外网绑定关系
advertised.listeners=PLAINTEXT://your.host.name:9092
# 配置kafka使用内存kafka-server-start.sh
# 在start中加入jvm的启动参数,默认是1G
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"

2:启动服务器

kafka需要使用zookeeper,所以你首先需要启动一个zookeeper的服务,如果你没有的话,就使用kafka内置的脚本来启动一个单节点的zookeeper的实例

加入& 使进程常驻在内存中

默认端口:9092

默认为localhost,如果不配置对应的服务器ip的话

#执行快速启动zookeeper,通过内置的zookeeper进行启动,如果要zookeeper服务器的话吗,需要再server.properties的配置文件里面加入zookeeper.connect = 你的服务器内网ip:2181
bin/zookeeper-server-start.sh config/zookeeper.properties & [2013-04-22 15:01:37,495] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
...

然后启动kafka的服务器:通过配置文件启动kafka

# 启动kafka
# server.properties的配置文件中有一个项目: host.name需要配置成为你的内网服务器ip地址,访问的时候通过外网环境通过外网ip地址访问,内网环境通过内网地址访问
bin/kafka-server-start.sh config/server.properties &
[2013-04-22 15:01:47,028] INFO Verifying properties (kafka.utils.VerifiableProperties)
[2013-04-22 15:01:47,051] INFO Property socket.send.buffer.bytes is overridden to 1048576 (kafka.utils.VerifiableProperties)
...

3:创建一个topic名字叫做test

# 通过脚本命令创建一个主题为test的,并且使用的zookeeper的地址为localhost的
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

确认一下这个topic是否含有完毕

# 通过zookeeper的地址来访问对应的topics中的主题列表
bin/kafka-topics.sh --list --zookeeper localhost:2181
test

4:启动一个生产者发送一些消息过去

# 启动客户端推送对应的消息到服务器的kafka提供的端口
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test This is a message
This is another message

5:启动一个消费者获取对应主题的消息

# 启动客户端获取对应服务端信息的地址来消费消息,使用pull的方式,每间隔0.1s进行一次服务器获取
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning This is a message
This is another message

6:将kafka创建集群节点(暂时省略)

7:使用kafka连接进行导入导出数据(暂时省略)

8:使用kafka的流去处理数据(暂时省略)

使用场景切换:本地服务器,变成真实服务器,首先提供外部调用,应该使用的是服务器的地址

这个是在服务器本地测试场景:

切换成服务器场景的情况下,需要首先在将server.properties的配置文件中的

配置方式修正为服务器的内网ip地址,对外提供的外网ip地址会进行映射,映射到最终的内网地址中去

新版的只需要修改如下两个配置:参考文章

http://blog.csdn.net/chenxun_2010/article/details/72626618

zookeeper.connect = localhost:9092

listeners = PLAINTEXT://ip:9092

java项目进行场景测试:

服务器kafka版本:2.11- 0.11.1

客户端kafka版本:0.11.0.1

所以去maven中寻找对应的版本的jar包进行使用

org.apache.kafka
kafka-clients
0.11.0.1

查看具体的api调用:

  1. 生产者:org.apache.kafka.clients.producer.KafkaProducer.class
  2. 消费者:org.apache.kafka.clients.consumer.KafkaConsumer.class

包结构:

clients

admin

consumer:KafkaProducer(实现类)

producer:KafkaConsumer(实现类)

otherclass

common

server.policy(服务公用)

在具体实现类里面源码中有启动的示例代码再类的头部注释中

遇到了一个问题:

Failed to load class "org.slf4j.impl.StaticLoggerBinder".

kafka默认引用再java类中在程序中引入了org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar的jar包

引入对应的实现日志的框架使用logback框架

再pom的配置文件中加入对应的依赖

并且debug的日志等级很烦人,所以就加入了配置文件

参考文章:http://www.cnblogs.com/h--d/p/5668152.html

加入logback的库依赖引用

至少需要引用三个模块:

logback-classic

logback-core

logback-access

这三个模块的内容

其中参考了这篇文章觉得很详细,所以就提供出来:

http://www.cnblogs.com/warking/p/5710303.html

使用一个新的工程进行测试,一个启动消费者,一个启动生产者,编写对应的代码

  1. 编写单元测试读取配置建立连接,发送消息
  2. 生产者消费者所需要的依赖jar包
  3. 启动线程消费者拉取消息成功消费(实现消息队列的功能)

源码示例大家可以去github上拉取:

https://github.com/fly-piglet/kafkastudy

【运维技术】从零开始搭建开发使用的Kafka环境的更多相关文章

  1. 技术沙龙|京东云DevOps自动化运维技术实践

    自动化测试体系不完善.缺少自助式的持续交付平台.系统间耦合度高服务拆分难度大.成熟的DevOps工程师稀缺,缺少敏捷文化--这些都是DevOps 在落地过程中,或多或少会碰到的问题,DevOps发展任 ...

  2. 干货云集 WOT 2017全球架构与运维技术峰会揭密技术难点

    WOT,World Of Tech专注互联网IT技术领域,是一场不容错过的技术盛会!WOT 2017全球架构与运维技术峰会三大章节,15大技术专场,60+国内外一线互联网精英大咖站台,打造兼顾技术视野 ...

  3. 亲爱的,我是一条Linux运维技术学习路径呀。

    根据我的经验,人在年轻时,最头疼的一件事就是决定自己这一生要做什么.在这方面,我倒没有什么具体的建议:干什么都可以,但最好不要写小说,这是和我抢饭碗.总而言之,干什么都是好的:但要干出个样子来,这才是 ...

  4. 沙龙报名 | 京东云DevOps——自动化运维技术实践

    随着互联网技术的发展,越来越多企业开始认识DevOps重要性,在企业内部推进实施DevOps,期望获得更好的软件质量,缩短软件开发生命周期,提高服务稳定性.但在DevOps 的实施与落地的过程中,或多 ...

  5. 突破LVS瓶颈,LVS Cluster部署(OSPF + LVS) - lxcong的运维技术 - 开源中国社区

    突破LVS瓶颈,LVS Cluster部署(OSPF + LVS) - lxcong的运维技术 - 开源中国社区 突破LVS瓶颈,LVS Cluster部署(OSPF + LVS)

  6. 端口映射工具 redir/socat/xinetd - 运维技术 - 开源中国社区

    端口映射工具 redir/socat/xinetd - 运维技术 - 开源中国社区 端口映射工具 redir/socat/xinetd    10人收藏此文章, 我要收藏 发表于3天前(2013-08 ...

  7. CNUTCon2017全球运维技术大会(持续更新中) - 斯达克学院 - 实战驱动的 IT 教育平台 - Powered By EduSoho

    CNUTCon2017全球运维技术大会(持续更新中) - 斯达克学院 - 实战驱动的 IT 教育平台 - Powered By EduSoho   https://new.stuq.org/cours ...

  8. 【运维技术】redis(一主两从三哨兵模式搭建)记录

    redis(一主两从三哨兵模式搭建)记录 目的: 让看看这篇文章的的人能够知道:软件架构.软件的安装.配置.基本运维的操作.高可用测试.也包含我自己,能够节省对应的时间. 软件架构: 生产环境使用三台 ...

  9. 【运维技术】kafka三实例集群环境搭建及测试使用

    kafka三实例集群环境搭建及测试使用 单机搭建分为两部分:1. 软件安装启动 2. 软件配置 软件安装启动: # 切换到目录 cd /app # 获取kafka最新安装包,这边使用的是镜像地址,可以 ...

随机推荐

  1. C#中的抽象类与重写

    今天的我们学习了好多,最初上午学习了文件流的方法,老师告诉我们是选修,可能以后不怎么用吧,但是还是想学下,似乎用个小程序读写文件很快地节奏,所以有点小兴趣学习,明天我再看看啦!今天之后学习了多态,继承 ...

  2. Path类和File类的应用

    今天是我学习C#基础的第13天,可以说马上就要结束这个基础课程,感觉学习的理论性的我不能说全部掌握了,我只想说在思路上面的语法以及用法我应该基本掌握了,感觉效果不错,不得不说,要想在一种语言上面有大的 ...

  3. C++11新特性之六——元编程

    C++11新特性之六——元编程

  4. 微信小程序 this.setData 修改json里面的值

    page({ data:{ s1:{a:"",b:"b"} }, changeData:function(e){ var cData=this.data.s1; ...

  5. jquery获取父级元素、子级元素、兄弟元素的方法

    jQuery.parent(expr) 找父亲节点,可以传入expr进行过滤,比如$("span").parent()或者$("span").parent(&q ...

  6. 【Twitter接口】网站嵌入推特信息

    提示:要 翻 墙 的,墙内的去玩新浪微博吧 方法 1  打开链接:  https://publish.twitter.com  ,输入链接.在下边选择时间表格式 复制这段代码.粘贴到你的网站,就可以使 ...

  7. 【Select2】带搜索框的下拉框美化插件

    1  引入js css 文件 <script src="js/jquery-1.11.1.min.js"></script> <script src= ...

  8. 如何偷懒地用 PHP 搭建一个班级网站

    版权声明:本文由李宜东原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/116 来源:腾云阁 https://www.qclo ...

  9. kubernetes创建yaml,pod服务一直处于 ContainerCreating状态的原因查找与解决

    最近刚刚入手研究kubernetes,运行容器的时候,发现一直处于ContainerCreating状态,悲了个催,刚入手就遇到了点麻烦,下面来讲讲如何查找问题及解决的 运行容器命令: kubectl ...

  10. python 多线程ping大量服务器在线情况

    需要ping一个网段所有机器的在线情况,shell脚步运行时间太长,用python写个多线程ping吧,代码如下: #!/usr/bin/python #coding=utf-8 ''' Create ...