【原创】从零开始搭建开发使用的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. JDK1.8在LINUX下安装步骤

    JDK1.8在LINUX下安装步骤: 在/usr/lib/目录下新建jvm文件夹,如果已有jvm文件夹,则将之前的JDK版本删除,即在jvm目录下执行命令:rm –rf * 将JDK文件jdk-8u4 ...

  2. PHP之Smarty模板引擎

    前面的话 对PHP来说,有很多模板引擎可供选择,但Smarty是一个使用PHP编写出来的,是业界最著名.功能最强大的一种PHP模板引擎.Smarty像PHP一样拥有丰富的函数库,从统计字数到自动缩进. ...

  3. php实现注册审核功能

    本章主要实现注册之后审核通过的功能,共这几部分组成: 1. 创建数据库:mydb数据库的user表   注:isok判断是否通过审核,1为通过,0为未通过. 显示效果: 2.首先做注册界面:zhuce ...

  4. PHP面向对象 实例化 构造函数 封装 继承 静态

    PHP面向对象 实例化 构造函数 封装 继承 静态 面向对象: 一:定义类 class Dog { var $name; var $age; var $pinzhong; function Jiao( ...

  5. Java虚拟机原理图解

    具体详情参考: http://blog.csdn.net/luanlouis/article/details/41046443 http://blog.csdn.net/luanlouis/artic ...

  6. ReactNative For Android 项目实战总结

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

  7. [UML]UML 教程

    统一建模语言(UML)已经迅速变成建立面向对象软件的事实标准.本教程提供了Enterprise Architect支持的13种UML图的技术概览.UML 2 详细的语义解释请看新的UML 2 教程. ...

  8. 获取access_token示例代码

    文档中心--百度AI-百度AI开放平台 http://ai.baidu.com/docs#/NLP-API/top #include <iostream> #include <cur ...

  9. H5上传压缩图片

    看这个,比较全的 https://github.com/mhbseal/html5ImgCompress ,几乎所有痛点都解决了! PC上传图片 基本结构 form[enctype="mul ...

  10. Idea的注入和自动编译配置

    实时编译: 第二个(防止编译时Autowired报错): 修改成: