02_Kafka单节点实践

1、实践场景

开始前的准备条件:

1) 确认各个节点的jdk版本,将jdk升级到和kafka配套的版本(解压既完成安装,修改/etc/profile下的JAVA_HOME,source /etc/profile,重启后jdk生效)

2、单节点kafka实践

1) 启动zookeeper集群

各个节点上启动zookeeper进程
# bin/zkServer.sh start

启动后,查看各个节点的zookeeper状态 (leader, follower etc)
#bin/zkServer.sh status

2) 配置kafka的zk集群

配置文件:config/zookeeper.properties

配置要点:zookeeper中snapshot数据的存放地址,和zookeeper集群中的配置保持一致

3) 配置本节点上要启动的broker

配置文件: config/server.properties
配置要点

broker.id

log.dirs (将在该路径下自动创建partition目录)

zookeeper.connect (broker要连接的zookeeper集群地址和port)

检查broker发布给producer和consumer的主机名和端口号(9092)

配置后的参数如下

# broker id, 每个broker的id必须是唯一的
broker.id=0

# kafka存放消息的目录
log.dirs=/usr/local/src/kafka_2.11/tmp/

# broker连接的zk集群,节点间通过逗号分隔,默认zk开放给客户端连接的端口号是2181
zookeeper.connect=master:2181,slave1:2181,slave2:2181

注意

1) 默认Kafka会直接在ZooKeeper的根路径下创建znode,这样Kafka的ZooKeeper配置就会散落在根路径下面
2) 可以指定kafka在zookeeper的某个路径下去进行操作, 将server.properties中的zookeeper.connect修改为:
       a. zookeeper.connect=master:2181,slave1:2181,slave2:2181/kafka
       b. 同时手动在zookeeper中创建/kafka节点 (create /kafka)

4)启动单个Broker

# ./bin/kafka-server-start.sh   ./config/server.properties

5)查看当前kafka集群中的Topic

# ./bin/kafka-topics.sh --list --zookeeper master:2181,slave1:2181,slave2:2181
# ./bin/kafka-topics.sh --list --zookeeper master:2181,slave1:2181,slave2:2181/kafka   # 如果修改了kafka在zookeeper下的znode节点路径,则要在--zookeeper参数中跟上chroot路径

6) 创建topic

创建Topic时,会根据broker的个数,对replication-factor进行校验;

# ./bin/kafka-topics.sh --create --zookeeper master:2181,slave1:2181,slave2:2181 --replication-factor 1 --partitions 1 --topic mytopic

7) 查看topic描述信息

# ./bin/kafka-topics.sh --describe --zookeeper master:2181,slave1:2181,slave2:2181 --topic mytopic

partition:0        该partition的编号,从0开始
leader:0          该partition的leader节点的broker.id = 0
replicas:0       表示partition落地的所有broker, 包括leader在内
isr:0                当前处于in-sync的replicas节点, 包括leader在内, broker.id = 0

8) zookeeper上将记录kafka已经创建的topic

9)broker的log.dirs中将创建partition目录

目录名topic名-partition编号       //编号从0开始

mytopic-0   

10)Partition目录下的segment文件

每一个segment,都会由 log文件,index文件 组成

解析:

xxxx.log           -- 最初的log文件,文件名是初始偏移(base offset),   消息存储在log文件
xxxx.index       -- 最初的index文件,文件名是初始偏移(base offset)index则用于对应log文件内的消息检索
                             offset, postion
                             offset, 消息计数; postion,消息头在log文件中的起始位置(position从0开始)
                             index文件可以映射到内存,从index文件的名字可以判断出某一个消息应该位于哪一个log文件

segment文件的默认最大size为1G,超过该size后才会创建新的segment文件,新的segment文件将称为active segment, 数据是向active segment写入

11) 调整Topic的partition个数

只能增加,不能减少

# ./bin/kafka-topics.sh --alter --zookeeper master:2181,slave1:2181,slave2:2181 --topic mytopic --partitions 2

物理的partition目录,也变为了2个

12)使用kafka提供的Producer客户端,模拟消息发送

# bin/kafka-console-producer.sh --broker-list localhost:9092 --topic mytopic

--broker-list:      该producer要向哪些broker推送消息, ip:port形式说明
--topic:              该producer要向哪一个Topic发送消息

启动producer客户端后,每行都会作为一条message, 存储到该topic的partition文件下的log文件中

13) 查看log文件中,消息落地到了哪里

1) 由于消息中没有指定key,  kafka将针对每条message,随机找一个partition进行存放

2)4条消息,存储到了两个分区mytopic-0和mytopic-1下

mytopic-0分区,log文件存储了2条消息

mytopic-1分区,log文件存储了2条消息

14)启动Consumer, 模拟消息的消费

1、Consumer消费消息时,只需要指定topic+offset
2、通过zookeeper获取topic的partition位于哪些broker上,各自的leader broker是谁,然后和leader broker连接,获取数据

 ./bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic mytopic --from-beginning  

3、观察多个partition下,consumer端数据的顺序

topic有2个分区,consumer端得到的数据顺序和发送端的不一定相同,但每个partiton内部的消息顺序能够保证(非全局有序,partition内部有序)

时间: 2024-08-29 23:22:47

02_Kafka单节点实践的相关文章

Hadoop之词频统计小实验(基于单节点伪分布)

声明:1)本文由我bitpeach原创撰写,转载时请注明出处,侵权必究. 2)本小实验工作环境为Ubuntu操作系统,hadoop1-2-1,jdk1.8.0. 3)统计词频工作在单节点的伪分布上,至于真正实际集群的配置操作还没有达到,希望能够由本文抛砖引玉. (一)Hadoop的配置修正 网上有很多Hadoop的配置教程,可自行寻找,这一部分主要是根据自身实际情况,结合自身特点,设置Hadoop.因为有时候根据别人的教程,设置总是不成功,因为别人的教程依赖于别人的软件或操作环境特点. 本部分也

恒天云快速部署指南--OpenStack H版本虚拟机单节点部署解决方案

本帖是openstack单节点在虚拟机上部署的实践.想要玩玩和学习openstack的小伙伴都看过来,尤其是那些部署openstack失败的小伙伴.本帖可以让你先领略一下openstack的魅力.本ISO由恒天云团队基于openstackH版本制作. ISO介绍 恒天云 All In One ISO是一个简单.易用.高效的恒天云部署工具.能够帮助用户快速部署恒天云单节点基础版本,从而更好的体验恒天云.本文档重点讲解在虚拟机中安装部署恒天云 All In One ISO,不包含物理机安装.物理机安

RDO单节点部署openstack (Havana)

OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作.OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单.可大规模扩展.丰富.标准统一的云计算管理平台.OpenStack通过各种互补的服务提供了基础设施即服务(IaaS)的解决方案,每个服务提供API以进行集成. OpenStack 是一个旨在为公共及私有云的建设与管理提供软件的开源项目.它的社区拥有超过130家企业及1350位开发者,这些机构与个人都将OpenStack作为基础设施即服务(简称I

Ubuntu 12.04 Openstack Essex 安装(单节点)

这是陈沙克一篇非常好的博文,当时在进行openstack排错的时候,多亏了这篇文章里面有些内容 帮我找到了问题的所在: 原文:http://www.chenshake.com/ubuntu-12-04-openstack-essex-installation-single-node/#Nova-volume =============以下是转载内容========================== 亲自测试,成功! 测试环境: esx5.0 虚拟机环境   修改配置虚拟机配置文件 在esxi

zookeeper的单节点搭建和分布式搭建

zookeeper的单节点搭建 1.把这个zookeeper-3.4.5.tar.gz文件上传到服务器上的/usr/local目录下 2.解压:tar -zxvf zookeeper-3.4.5.tar.gz 3.重命名:mv zookeeper-3.4.5 zookeeper 4.cd zookeeper/conf 5.修改配置文件的名称:mv zoo_sample.cfg zoo.cfg 6.cd .. 7.启动zookeeper:bin/zkServer.sh start 8.验证:jps

【Zookeeper】Zookeeper集群单节点提供服务

以下只在特殊情况下使用,不要用在生产环境. 一.问题背景 公司的产品使用Zookeeper做为集群支持,但是客户在验收的时候提出了一个很为难人的要求,那就是3台集群服务,停止2台以后,还要求我们的应用能提供服务,这就有点难为人了. 因为用过Zookeeper的人都知道,Zookeeper的leader的选举需要大多数同意,也就是说三台机器的Zookeeper集群那么选举leader就需要两台,如果只剩下一台Zookeeper那么是无法完成leader选举的,也就是说Zookeeper将不能对外提

kafka的单节点搭建和集群搭建

首先,kafka的运行,需要zookeeper在后台运行,虽然kafka中已经内置了zookeeper,但是我们还是用自己搭建的分布式zookeeper kafka的单节点搭建  (这里用了自带的zookeeper) 启动服务 ?1.配置和启动zookeeper服务 使用kafka内置zk ?配置zk文件:/opt/kafka/config/zookeeper.properties ?启用zk服务: ?/opt/kafka/bin/zookeeper-server-start.sh /opt/k

搭建JEESZ分布式架构10-Redis分布式缓存安装(单节点)

Redis分布式缓存安装(单节点) Redis官网:http://redis.io独立缓存服务器:IP:xxx.xxx.xxx.xxx安装环境:CentOS 6.6Redis 版本:redis-3.0 (因为 Redis3.0 在集群和性能提升方面的特性,rc 版为正式版的候选版,请在安装时去官网选用最新版)用户:root安装目录:/usr/local/redis 下面我们针对于Redis安装做下详细的记录:编译和安装所需的包:# yum install gcc tcl 提醒:下载 3.0 版

ActiveMQ的单节点和集群部署

平安寿险消息队列用的是ActiveMQ. 单节点部署: 下载解压后,直接cd到bin目录,用activemq start命令就可启动activemq服务端了. ActiveMQ默认采用61616端口提供JMS服务,使用8161端口提供管理控制台服务,执行以下命令以便检验是否已经成功启动ActiveMQ服务: ps -aux | grep activemq netstat -anp | grep 61616 此外,还可直接访问管理页面:http://ip:8161/admin/ ,用户名和密码可以