【原创】从零开始搭建开发使用的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. ARM承认芯片漏洞:披露修复细节

    在谷歌安全研究人员曝光了影响整个芯片产业的CPU设计漏洞后,ARM的Cortex系列处理器也未能逃过一劫.在一篇致开发者的博客文章中,该公司披露了三个已知漏洞的细节——其中两个与Spectre有关.第 ...

  2. js里面声明变量时候的注意事项

    变量名可以是中文,只能有下划线,$,数字和字母组成,开头只能以下划线(不建议使用)和字母开头.

  3. 【PHP】数字补零的两种方法

    在php中有两个函数,能够实现数字补零, str_pad() sprintf() 函数1 : str_pad 顾名思义这个函数是针对字符串来说的这个可以对指定的字符串填补任何其它的字符串 例如:str ...

  4. 【微信开发】PC端 微信扫码支付成功之后自动跳转

    场景: PC端   微信扫码支付 结果: 支付成功 自动跳转 实现思路: 支付二维码页面,写ajax请求支付状态,请求到结果,无论成功还是失败,都跳转到相应的结果页面 具体实现方法: html部分: ...

  5. Elasticsearch配置参数介绍

    Elasticsearch的config文件夹里面有两个配置文件:elasticsearch.yml和logging.yml.第一个是es的基本配置文件,第二个是日志配置文件,es也是使用log4j来 ...

  6. 微信小游戏5.2.2 没有xml支持库的问题解决

    需要下载xml支持库,并在game.js添加 window.DOMParser = require("./xmldom/xmldom.js").DOMParser; 如下图:

  7. Mac - 如何在windows下打开 pages

    1.iCloud 苹果邮箱网页版打开(www.icloud.com) 2.在pages编辑完后,导出word格式.便能继续编辑.修改文档内容,有小部分字体.设计会在导出word格式后发生改变. 3.导 ...

  8. applicationContext.xml的文件位置就可以有两种默认实现

    ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息.因为它实现了ServletContextListener这个接口,在web ...

  9. UPDATE从左向右,变量优先,逐行更新.顺序执行的,可以交换两列之间的值

    CREATE TABLE tab_update (id TINYINT,n1 NVARCHAR(30),v1 NVARCHAR(30),s1 NVARCHAR(30)) INSERT INTO tab ...

  10. 有关velocity的资料(等待整理)

    proxy-target-class="true" 与proxy-target-class="false"的区别: proxy-target-class属性值决 ...