kafka集群介绍及搭建

介绍

kafka是一个高性能、低延迟、分布式的消息传递系统,特点在于实时处理数据。集群由多个成员节点broker组成,每个节点都可以独立处理消息传递和存储任务。

在这里插入图片描述

路由策略

发布消息由key、value组成,真正的消息是value,key是标识路由消息时所要存放的Partition:

1、若已指定partition,消息则直接写入到指定partition;

2、若未指定partition但指定了key,则通过对key的hash值与partition数量取模,结果就是对应的partition;

3、若partition和key均未指定,则使用轮询算法选出一个partition;

写入过程

1、 producer向kafka集群提交连接请求,任意broker节点都会返回broker controller的通信URL(配置文件中的listeners地址);

2、producer向broker controller询问指定topic所对应的partition的leader列表地址;

3、broker controller从zk中查找,返回指定topic所对应的partition的leader列表地址;

4、producer根据消息路由策略,查找符合要求的partition leader,然后发送消息;

发送ack机制

1、 acks=0:producer发送的消息到发送端的buffer中就直接返回了,至于这个消息是否真的发送到broker,producer不关心,(类似udp协议);

2、ack=1:producer发送的消息一定要存储到对应的partition的leader副本日志文件中才算成功,若失败,则会retry。在这种模式下,当消息已经存储在leader副本中,但是follower副本还没来得及同步,leader副本的broker节点挂了,消息才会丢失;

3、当acks=-1或者all:producer发送的消息一定要存储到对应的partition的所有副本日志文件中才算消息发送成功,若失败,则会retry。在这种模式下,所有副本的broker节点都挂了,才会丢失;

消费过程

1、consumer向kafka集群提交连接请求,任意broker节点都会返回broker controller的通信URL(配置文件中的listeners地址);

2、consumer指定要消费的topic,向broker controller发送poll请求;

3、broker controller为consumer分配一个或多个partition leader,并将该partitioin的当前offset发送给consumer;

4、consumer消费完后,向broker发送新的offset;

5、broker在相应的consumer_offset中更新offset值;

6、重复1-5,直到consumer停止请求消息。

特点

1、producer发布的所有消息会一致保存在kafka集群中,不管消息是否被消费;

2、可以通过设置保留时间来清理过期的数据;

3、consumer可以重置offset,从而可以灵活消费存储在broker上的消息;

环境

systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

vi /etc/hosts
ip1 node1
ip2 node2
ip3 node3

安装配置

#全节点
tar -xvf kafka_2.12-2.0.0.tgz

vi config/server.properties

log.dirs=/var/log/kafka-logs
zookeeper.connect=ip1:2181,ip2:2181,ip3:2181
#1至3节点
broker.id:0
listeners=PLAINTEXT://ip1:9092

broker.id:1

listeners=PLAINTEXT://ip2:9092

broker.id:2
listeners=PLAINTEXT://ip3:9092

#启动顺序:先启动zookeeper,后启动kafka
#关闭顺序:先关闭kafka,后关闭zookeeper (可使用kill命令直接关闭)
cd /kafka_2.12-2.0.0
kafka-server-start.sh -daemon config/server.properties &

监控

启用JMX

#全节点
vi /kafka_2.12-2.0.0/bin/kafka-server-start.sh
export JMX_PORT="9999"

在这里插入图片描述

可视化eagle

tar -zvxf v3.0.1.tar.gz
cd kafka-eagle-bin-3.0.1 && tar -zxvf kafka-eagle-web-3.0.1-bin.tar.gz

yum install -y mariadb*

mysqladmin -uroot -p password Mdb123#

MariaDB [(none)]>create user eagle@localhost identified by 'kafka123#';
MariaDB [(none)]>select user,host from mysql.user;
MariaDB [(none)]>create database ke;
MariaDB [(none)]>exit

vi /etc/profile
export KE_HOME=/efak-web-3.0.1
export PATH=$PATH:$KAFKA_HOME/bin:$ZK_HOME/bin


vi /efak-web-3.0.1/conf/system-config.properties

cluster1.zk.list=ip1:2181,ip2:2181,ip3:2181
efak.driver=com.mysql.cj.jdbc.Driver
efak.url=jdbc:mysql://127.0.0.1:3306/ke?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
efak.username=efak
efak.password=kafka123#

ke.sh start

在这里插入图片描述

启动

先启动zookeeper服务,后启动kafka服务,broker按照不同topic、partition选举为不同leader、follower,实现消息传递和存储任务的分布式协作。

zookeeper: link

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/466069.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Two Birds with One Stone

learnable mask M 辅助信息 作者未提供代码

Illustrator 2024:创意与技术的完美融合,引领矢量设计新潮流

Illustrator 2024是一款由Adobe公司倾力打造的强大矢量图形设计软件,以其丰富的绘图工具、卓越的设计功能和直观的操作界面,成为专业设计师和创意工作者的首选工具。这款软件不仅提供了画笔、铅笔、形状、路径等多种工具,帮助用户轻松创建各种…

Python+Appium+Pytest+Allure实战APP自动化测试!

pytest只是单独的一个单元测试框架,要完成app测试自动化需要把pytest和appium进行整合,同时利用allure完成测试报告的产出。 编写常规的线性脚本具体的步骤如下: 1、设计待测试APP的自动化测试用例 2、新建app测试项目 3、配置conftest.py文…

精读《架构设计之 DCI》

本期精读文章是:The DCI Architecture 1 引言 随着前端 ES6 ES7 的一路前行, 我们大前端借鉴和引进了各种其他编程语言中的概念、特性、模式; 我们可以使用函数式 Functional 编程设计,可以使用面向对象 OOP 的设计,可以使用面向…

ai写作一键生成,分享6种好用的写作软件,一定要看

在写文章时,我们常常会遇到灵感丧失、词句不顺的情况,为了解决这一问题,小编为大家推荐几款实用的AI写作软件,一同来探索一下吧! 一、爱制作AI 爱制作AI是一款专注于写作的软件,强大的智能数据库让它备受…

避免内存泄漏及泄漏后的排查方法【C++】

内存泄漏 前言编码std::unique_ptr申请单个对象申请对象数组 std::shared_ptr申请单个对象申请对象数组 编码总结 前言 最近在工作中被内存泄漏疯狂折磨,整理一下自己的思考。 编码 最近在工作中被内存泄漏疯狂折磨,我真的奉劝各位,如果你…

生成式 AI 术语指南:带有配图说明,没有数学公式

编者按: 生成式人工智能技术的发展日新月异,这一领域涉及到了越来越多的专业术语和概念。对于刚接触这一领域的新手来说,理解这些术语算是一个门槛。我们有必要整理和解释这些术语,帮助更多人快速入门,投身 AI 事业。 …

Leetcode 202.快乐数 JAVA

题目 思路 要注意题目中说的无限循环:它是指在求平方和的过程中,会再次出现之前的值(想象一个圈),这种情况的时候肯定算不出1来。 所以我们要设定跳出循环的条件是:当平方和结果为1或者出现循环了 出现循…

应届生岗位直达服务

详情请私信了解 技术面试: C技术深入学习资源礼包(岗位技术栈查漏补缺/非卖品) 系统设计面试的准备 模拟技术面试和问题纠错反馈 职业发展和软技能: 简历优化和面试技巧 职业规划和目标设定 沟通和团队协作技能 实际…

Redis的安装和部署教程(Windows环境)

一、安装Redis服务 1、下载Redis压缩包 以下这个是我网盘里面的(这个是v8.0版本的,支持导入.rdb数据文件) 链接:百度网盘 请输入提取码 提取码:x0f1 --来自百度网盘超级会员V5的分享 2、解压到文件夹 将下载的压缩…

NSGA-III算法:如何在多目标优化问题中找到最合适的解

当我们面临多个目标函数时,单目标的遗传算法可能无法满足需求。这时,我们可以引入多目标遗传算法。在这种情况下,目标函数可能存在冲突,例如,一个目标函数需要最小化,而另一个目标函数需要最大化。某个目标…

利用Python进行网络爬虫:Beautiful Soup和Requests的应用【第131篇—Beautiful Soup】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 利用Python进行网络爬虫:Beautiful Soup和Requests的应用 在网络数据变得日益丰…

基于多尺度视网膜增强图像去雾算法(MSR,Multi-Scale Retinex),Matalb实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供有偿…

Mit6.s081 前置开发环境: 虚拟机ubuntu + ssh + vscode

虚拟机 ssh vscode 前置条件 下载VMware Download VMware Workstation ProUbuntuUbuntu系统下载 | Ubuntu vscode Visual Studio Code - Code Editing. Redefined Ubuntu版本:20.04 Ubuntu基本操作 ubuntu 安装 ssh 服务 sudo apt-get install openssh-serv…

前端学习之css伪元素选择器

伪元素选择器 &#xff08;注释是对各个内容的解释与理解&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>伪元素选择器</title><!-- 双冒号开头一般都称为伪元素&#xff0c;…

Redis命名设计

可读性和管理性 以项目名为前缀(防止key冲突)&#xff0c;用冒号分隔&#xff0c;比如项目名:表名:id zh(知乎):news_data(新闻数据):2(主键id) zh:news_data:2 精简性 key的命名&#xff0c;尽量精简&#xff0c;key的名字长度对内存的占用不可忽视&#xff0c;我们来实际…

读者交流群

自开设公众号以来&#xff0c;收到众多读者的关注&#xff0c;所以我很高兴在这里向大家推荐加入我的技术交流群。如果你对Java和Go语言有兴趣&#xff0c;想要与其他同好分享经验和知识&#xff0c;那么这个读者群将是一个理想的选择。 在这个读者群中&#xff0c;我们有机会与…

git基础命令(四)之分支命令

目录 基础概念git branch-r-a-v-vv-avv重命名分支删除分支git branch -h git checkout创建新的分支追踪远程分支同时切换到该分支创建新的分支并切换到该分支撤销对文件的修改&#xff0c;恢复到最近的提交状态&#xff1a;丢弃本地所有修改git checkout -h git merge合并指定分…

docker 安装minio,详细图解

废话不多说&#xff0c;直接上干货 docker 安装minio 拉取镜像 docker pull minio/minio创建数据目录、配置目录 mkdir /opt/minio/data mkdir /opt/minio/config启动容器 docker run -p 9000:9000 -p 9090:9090 \--name minio \-d --restartalways \-e "MINIO_ACCESS_KE…

[全网首发中文版]LLM4Decompile: Decompiling Binary Code with Large Language Models

LLM4Decompile: Decompiling Binary Code with Large Language Models 摘要 反编译的目的是将编译后的代码恢复为人类可读的源代码&#xff0c;但在名称和结构等细节上遇到了困难。 大型语言模型&#xff08;大语言模型&#xff09;显示出编程任务的前景&#xff0c;激励其应…