Kafka分布式环境搭建 (二)赞

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

这篇文章将介绍如何搭建kafka环境,我们会从单机版开始,然后逐渐往分布式扩展。单机版的搭建官网上就有,比较容易实现,这里我就简单介绍下即可,而分布式的搭建官网却没有描述,我们最终的目的还是用分布式来解决问题,所以这部分会是重点。

Kafka的中文文档并不多,所以我们尽量详细点儿写。要交会你搭建分布式其实很简单,手把手的教程大不了我录个视频就好了,可我觉得那不是走这条路的方 式。只有真正了解原理,并且理解的透彻了才能最大限度的发挥一个框架的作用。所以,如果你不了解什么事kafka,请先看:《kafka初步》

 

我们从搭建单机版的环境开始说起,如果你喜欢看英文版:这里有官方的《quick start》

单机版的部署很简单,我就讲几点比较重要的,首先kafka是用scala编写的,可以跑在JVM上,所以我们并不需要单独去搭建scala的环境,后面会涉及到编程的时候我们再说如何去配置scala的问题,这里用不到,当然你要知道这个是跑在linux上的。第二,我用的是最新版0.7.2的版本,你下载完kafka你可以打开它的目录浏览一下:

我就不介绍每个包里的内容是干嘛的,我就着重说一点,你在这个文件夹里只能找到3个jar包,并且这3个还不能用于后面的编程,而且你也没法在里面找到pom这样用于构建的xml。也别急,也别满世界找,这些依赖库得等你把它放到linux上才会出现(当然需要命令)。

搭建单机版环境,简单的说有那么几步:

 

1. 安装java环境,我用的是最新的版本jdk7的

2. 将下载下来的kafka扔到linux上,并解压。我用的red het server的linux。

3. 接下来就是下载kafka的依赖包和构建kafka的环境。注意,这一步需要电脑联网。具体命令就是官网介绍的./sbt update 和 ./sbt package。

4.  执行完上面这步大概会花个10多分钟吧,我在自己家里ubuntu没有成功,报了下载不到jline的错。单位里用虚拟机ubuntu成功了,我深刻怀疑是网的问题。上面这不执行完了有两点要注意,一是sbt帮你下载完了所有依赖库,但是这些jar都是分散在各个目录下的,注意区分。二是,这些jar一部分是kafka的编程包,一部分是scala的环境包,上面说了没必要自己去搭scala的环境道理就在这边,你自己去下一个2.9的scala,但人家kafka只支持2.8、2.7。所以编程的时候就用sbt给你下好的包即可。后面讲到编程的时候,会写怎么搭编程环境,很简单的。

上面的步骤都执行完了,环境算是好了,下面我们要测试下是否能成功运行kafka:

 

1.   启动zookeeper server :bin/zookeeper-server-start.sh ../config/zookeeper.properties  & (用&是为了能退出命令行)

2.    启动kafka server:  bin/kafka-server-start.sh ../config/server.properties  &

3.    Kafka为我们提供了一个console来做连通性测试,下面我们先运行producer:bin/kafka-console-producer.sh --zookeeper localhost:2181 --topic test 这是相当于开启了一个producer的命令行。命令行的参数我们一会儿再解释。

4.    接下来运行consumer,新启一个terminal:bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

5.    执行完consumer的命令后,你可以在producer的terminal中输入信息,马上在consumer的terminal中就会出现你输的信息。有点儿像一个通信客户端。

具体可看《quick start》

如果你能看到5执行了,说明你单机版部署成功了。下面解释下两条命令中参数的意思。--zookeeper localhost:2181 这个说明了去连本机2181端口的zookeeper server,--topic test,在kafka里,消息按topic来区分,我们这里的topic叫test,所以不管是consumer还是producer都指向了test。其他的参数,我就截图了,首先是producer的参数:

Consumer的参数:

这些参数你可以先看个大概,之后会在编程中使用到,都可以动态的配置。

好了单机版就部署完了,那是不是我把consumer的放到另一台机器上就算分布式了呢。是的,前提是,你还能运行到上面的第5步。在讲配置之前,我们还是将上篇写的分布式来回顾一下,当然我们简化一下情况,按照实际部署的分析:

 

假设我只有两台机器,server1和server2。我现在想把zookeeper server和kafka server 和producer都放在一台机器上server1,把consumer放在server2上。这当然也叫分布式了,虽然机子不多,但是这个部署成功了,扩展是相当的容易。

我们还是按照那5个步骤来做,当然你肯定能知道,3、4两步的参数要改了,我们假设server1的IP是192.168.10.11 server2的IP是192.168.10.10:

1.  启动zookeeper server :bin/zookeeper-server-start.sh ../config/zookeeper.properties  & (用&是为了能退出命令行)

2.  启动kafka server:  bin/kafka-server-start.sh ../config/server.properties  &

3.   Kafka为我们提供了一个console来做连通性测试,下面我们先运行producer:bin/kafka-console-producer.sh --zookeeper 192.168.10.11:2181 --topic test 这是相当于开启了一个producer的命令行。

4.   接下来运行consumer,新启一个terminal:bin/kafka-console-consumer.sh --zookeeper 192.168.10.11:2181 --topic test --from-beginning

5.   执行完consumer的命令后,你可以在producer的terminal中输入信息,马上在consumer的terminal中就会出现你输的信息。

这个时候你能执行出第5步的效果么,是不是报了下面的错了:

 

我来说原因,在这之前想请你再回去看看《kafka初步》,看看里面讲分布式的内容:

这里的kafka server就是broker,broker是存数据的,producer把数据给broker,consumer从broker取数据。那zookeeper是干嘛的,说的肤浅点儿,zookeeper就是他们之间的选择分发器,所有的连接都要先注册到zookeeper上。你可以把它想象成NIO,zookeeper就是selector,producer、consumer和broker都要注册到selector上,并且留下了相应的key。

所以问题就出在了kafka server的配置server.properties上。Kafka注册到zookeeper上的信息不对,才导致了上面的错误。我们看config中server.properties的配置就可以知道:

1
2
3
4
# Hostname the broker will advertise to consumers. If not set, kafka will use the value returned
# from InetAddress.getLocalHost().  If there are multiple interfaces getLocalHost
# may not be what you want.
#hostname=

默认的hostname如果你不设置,就是127.0.0.1,所以你把这个hostname设置成192.168.10.11即可,这样你重启下kafka server端,就能执行第5步了。

成功配置的话,你能看到下面的效果,左边的是producer,右边的是consumer,看最下面两行好了,前面的是我之前测试用过的:

 

如果你还是云里雾里的,建议你回头去看看上篇文章,将kafka分布式基本原理的,kafka实际操作是要建立在对原理熟悉的情况下的。

搭建完了环境,后面就要开始写程序去处理实际问题了。当然再写程序之前,下一篇我会先写一点kafka为什么会有如此高的性能,它是怎么保障这些性能的。

来源http://my.oschina.net/ielts0909/blog/93190


本文转自快乐就好博客园博客,原文链接:http://www.cnblogs.com/happyday56/p/4210921.html,如需转载请自行联系原作者
相关文章
|
3月前
|
消息中间件 Java Kafka
如何在Kafka分布式环境中保证消息的顺序消费?深入剖析Kafka机制,带你一探究竟!
【8月更文挑战第24天】Apache Kafka是一款专为实时数据管道和流处理设计的分布式平台,以其高效的消息发布与订阅功能著称。在分布式环境中确保消息按序消费颇具挑战。本文首先介绍了Kafka通过Topic分区实现消息排序的基本机制,随后详细阐述了几种保证消息顺序性的策略,包括使用单分区Topic、消费者组搭配单分区消费、幂等性生产者以及事务支持等技术手段。最后,通过一个Java示例演示了如何利用Kafka消费者确保消息按序消费的具体实现过程。
119 3
|
3月前
|
消息中间件 Java Kafka
"Kafka快速上手:从环境搭建到Java Producer与Consumer实战,轻松掌握分布式流处理平台"
【8月更文挑战第10天】Apache Kafka作为分布式流处理平台的领头羊,凭借其高吞吐量、可扩展性和容错性,在大数据处理、实时日志收集及消息队列领域表现卓越。初学者需掌握Kafka基本概念与操作。Kafka的核心组件包括Producer(生产者)、Broker(服务器)和Consumer(消费者)。Producer发送消息到Topic,Broker负责存储与转发,Consumer则读取这些消息。首先确保已安装Java和Kafka,并启动服务。接着可通过命令行创建Topic,并使用提供的Java API实现Producer发送消息和Consumer读取消息的功能。
69 8
|
4月前
|
消息中间件 Kafka
kafka 集群环境搭建
kafka 集群环境搭建
69 8
|
4月前
|
消息中间件 Java Kafka
kafka Linux环境搭建安装及命令创建队列生产消费消息
kafka Linux环境搭建安装及命令创建队列生产消费消息
99 4
|
4月前
|
消息中间件 监控 Java
使用Kafka实现分布式事件驱动架构
使用Kafka实现分布式事件驱动架构
|
4月前
|
消息中间件 存储 Java
Apache Kafka是分布式消息系统,用于高吞吐量的发布订阅
【7月更文挑战第1天】Apache Kafka是分布式消息系统,用于高吞吐量的发布订阅。在Java中,开发者使用Kafka的客户端库创建生产者和消费者。生产者发送消息到主题,消费者订阅并消费。Kafka提供消息持久化、容灾机制,支持分区和复制以确保高可用性。通过优化如分区、批处理和消费者策略,可适应高并发场景。简单的Java示例展示了如何创建和交互消息。
63 0
|
24天前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
3月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
103 2
基于Redis的高可用分布式锁——RedLock
|
3月前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】