Kafka入门学习(一)

====常用开源分布式消息系统

*集群:多台机器组成的系统叫集群。

*ActiveMQ还是支持JMS的一种消息中间件。

*阿里巴巴metaq,rocketmq都有kafka的影子。

*kafka的动态扩容目前是通过zookeeper来完成的。

====kafka定义及使用背景

是一个分布式消息系统,由Linkedln使用Scala编写,用作Linkedln的活动流(Activity Stream)

和运营数据处理管道(Pipeline)的基础,具有高水平扩展和高吞吐量

应用领域:已经被多家不同类型的公司作为多种类型的数据管道和消息系统使用,如:淘宝、支付宝、百度、twitter等。

目前越来越多的开元分布式处理系统都支持与Kafka集成,如

Apache flume(用于日志收集)

Apache Storm(用于实时数据处理)

Spark(用于内存数据处理)

elasticsearch(用于全文检索)

====kafka相关概念

1)AMPQ协议(即Advanced Message Queuing Protocol)

详细参考博客:http://blog.csdn.net/zhangxinrun/article/details/6411841

--消费者(Consumer):从消息队列中请求消息的客户端应用程序;

--生产者(Producer):从broker发布消息的客户端应用程序;

--APQP服务器端(broker):用来接收生产者发送的消息并将这些消息路由给服务器中的队列;

2)kafka支持的客户端语言

kafaka客户端支持当前大部分主流语言,包括:C、C++、Erlang、Java、.net、perl、PHP、Python、Ryby、Go、JavaScript。

可以使用以上任何一种语言和kafka服务器进行通信(即编写自己的consumer和producer程序)

3)kafka的架构

和传统的分布式消息队列一样,是由生产者向kafka集群生产消息、消费者从kafka集群订阅消息z这样的架构所组成。

kafka集群中的消息是按照主题(或者说Topic)来进行组成的。

--主题(Topic):一个主题类似新闻中的体育、娱乐、教育等分类概念,在实际工程中通常一个业务一个主题。

--分区(Partition):一个Topic中的消息数据按照多个分区组织,分区是kafka消息队列组织的最小单位,一个分区可以看做是一个FIFO(先进先出)队列;kafka分区是提高kafka性能的关键手段。

这张图在整体上对kafka集群进行了概要,途中kafka集群是由三台机器(Broker)组成,当然,实际情况可能更多。

相应的有3个分区,Partition-0~Partition-2,图中能看到每个分区的数据备份了2份。备份的数量可以通过kafka的配置参数来进行配置。在图中配置成了2.

kafka集群从前端应用程序(producer)生产消息,后端通过各种异构的消费者来订阅消息。

kafka集群和各种异构的生产者、消费者都使用zookeeper集群来进行分布式协调管理和分布式状态管理、分布式锁服务的。

*备份(Replication):为了保证分布式可靠性,kafka0.8开始对每个分区的数据进行备份(不同Broker上),防止其中一个Broker宕机造成分区数据不可用。

====zookeeper集群搭建

参考博客:http://www.cnblogs.com/ggjucheng/p/3352591.html

  • 软件环境:

1)Linux服务器一台、三台、舞台(2*n+1台)。

问:是否可以用偶数台来搭建?

答:不一定,但是没有必要。根据zookeeper的工作原理,只要有超过半数以上存活,就可以对外提供服务。奇数方便判断“半数存活”。

2)JDK(我这里选择jdk-7u80-linux-x64.rpm)

3)zookeeper(我这里选择zookeeper-3.4.6.tar.gz,kafka在该版本上进行了大量测试,并修复了大量Bug)

  • JDK安装

(省略)

环境变量可以修改两个文件

1)/etc/profile:对所有用户都有效的。

2)~/.bashrc:代表的是当前用户。

  • zookeeper安装

1)解压缩:tar -zxvf zookeeper-3.4.6.tar.gz

2)配置文件:

--zoo.cfg文件的配置

zoo_sample.cfg是zk官方为我们提供的样本配置文件。

需要以它为副本复制一个zoo.cfg文件。zoo.cfg中需要配置以下内容:

•dataDir:存放数据

•dataLogDir:存放日志和快照

•server.1=<host>:<Master和Slave之间的通讯端口。默认为2888>:<Leader选举的端口。默认3888>。

集群中的每台机器都需要感知整个集群是由哪几台机器组成的,在配置文件中,可以按照这样的格式,每行写一个机器配置:server.id=host:port:port. 关于这个id,我们称之为Server ID,标识host机器在集群中的机器序号,在每个ZK机器上,我们需要在数据目录(数据目录就是dataDir参数指定的那个目录)下创建一个myid文件,myid中就是这个Server ID数字。

配置之后如下:

*zkdata和zkdatalog是新建的文件夹。用来存放数据和Log。

*dataLogDir这个属性如果不进行配置,将默认将zk事务日志和快照存放到dataDir下面,会严重影响性能。

*ip地址可以通过hostname -i来查看。

--myid的配置

可以通过echo命令来创建myid文件。命令:echo "1" > myid

3)启动zookeeper

启动方法:./zkServer.sh start

====kafka集群搭建

  • 软件环境

Linux服务器一台或多台

已经搭建好的zookeeper集群

kafka_2.9.2-0.8.1.1

  • kafka安装

1)解压缩kafka压缩包:tar -zxvf kafka_2.9.2-0.8.1.1

2)修改配置文件。kafka的配置文件很多,我们重点关注server.properties

具体配置内容请参考官方网站的配置:

http://kafka.apache.org/documentation.html#brokerconfigs

以及中文博客:http://www.cnblogs.com/quchunhui/p/5356720.html

我这里配置了一下几项:

###Socket Server Settings###

port=192.168.93.128

###Log Basics###

log.dirs=/opt/kafka_2.9.2-0.8.1.1/kafkalog

###Log Retention Policy###

message.max.bytes=5048576

default.replication.factor=2             //kafka集群保存消息的副本数

replica.fetch.max.bytes=5048576    //取消息的最大字节数

###Zookeeper###

zookeeper.connect=192.168.93.128:2181

  • kafka启动

后台启动命令:./kafka-server-start.sh -daemon ../config/server.properties

使用jps命令查看进程是否存在,以验证是否正确启动。

  • 验证是否搭建正确

首先尝试创建一个topic

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

查看topic的创建状况

./kafka-topics.sh --describe --zookeeper localhost:2181 --topic test

时间: 2024-10-12 13:26:29

Kafka入门学习(一)的相关文章

Kafka入门学习《一》

一.基本概念 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计. 这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: Kafka将消息以topic为单位进行归纳. 将向Kafka topic发布消息的程序成为producers. 将预订topics并消费消息的程序成为consumer. Kafka以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个broker. producers通过网络将消息发送到Kafka集

Kafka入门学习

1, http://www.cnblogs.com/quchunhui/p/5356511.html http://www.cnblogs.com/quchunhui/p/5356511.html http://blog.csdn.net/hmsiwtv/article/details/46960053 2,https://www.cnblogs.com/opaljc/archive/2012/03/25/2416545.html https://www.cnblogs.com/imarno/p

_00017 Kafka的体系结构介绍以及Kafka入门案例(初级案例+Java API的使用)

博文作者:妳那伊抹微笑 个性签名:世界上最遥远的距离不是天涯,也不是海角,而是我站在妳的面前,妳却感觉不到我的存在 技术方向:Flume+Kafka+Storm+Redis/Hbase+Hadoop+Hive+Mahout+Spark ... 云计算技术 转载声明:可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明,谢谢合作! qq交流群:214293307  (期待与你一起学习,共同进步) # Kfaka的体系结构 # 学习前言 Kafka的整个学习过程就是自己看官网的文档,出

Kafka教程(一)Kafka入门教程

1 Kafka入门教程 1.1 消息队列(Message Queue) Message Queue消息传送系统提供传送服务.消息传送依赖于大量支持组件,这些组件负责处理连接服务.消息的路由和传送.持久性.安全性以及日志记录.消息服务器可以使用一个或多个代理实例. JMS(Java Messaging Service)是Java平台上有关面向消息中间件(MOM)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生.发送.接收消息的接口简化企业应用的开发,翻译为Java

Kafka 入门

Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如Cloudera.Apache Storm.Spark都支持与Kafka集成. Kafka拓扑结构 安装和启动 Download Download the 0.10.2.1 release and un-tar it. tar -xzf kafka_2.11-0.10.2.1.tgz cd kafka_2.11-0.10.2.1 Start the

kafka入门详细讲解

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素. 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决. 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案.Kafka的目的是通过Hadoop的并行加载机制来统一线上和离

ElasticStack的入门学习

Beats,Logstash负责数据收集与处理.相当于ETL(Extract Transform Load).Elasticsearch负责数据存储.查询.分析.Kibana负责数据探索与可视化分析. 1.Elasticsearch 6.x版本的安装,我这里使用Elasticsearch 6.7.0版本的. 备注:之前安装过5.4.3版本的,https://www.cnblogs.com/biehongli/p/11643482.html 2.将下载好的安装包上传到服务器上面,或者你在线下载也可

全网最通俗易懂的Kafka入门!

摘自:https://www.cnblogs.com/Java3y/p/11982381.html 前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 在这篇之前已经写过两篇基础文章了,强烈建议先去阅读: 什么是ZooKeeper? 什么是消息队列? 众所周知,消息队列的产品有好几种,这里我选择学习Kafka的原因,无他,公司在用. 我司使用的是Kafka和自研的消息队列(Kafka和RocketMQ

【转帖】全网最通俗易懂的Kafka入门

全网最通俗易懂的Kafka入门 http://www.itpub.net/2019/12/04/4597/ 前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 众所周知,消息队列的产品有好几种,这里我选择学习Kafka的原因,无他,公司在用. 我司使用的是Kafka和自研的消息队列(Kafka和RocketMQ)改版,于是我就想学学Kafka这款消息队列啦.本篇文章对Kafka入门,希望对大家有所帮助