kafka常见命令操作及底层原理总结

Kafka常用命令及遇到的问题 命令:bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group my-group --new-consumer --reset-offsets --to-earliest --all-topics --execute。命令:bin/kafka-consumer-perf-test.sh --zookeeper localhost:2181 --messages 100000 --size 1000 --threads 1。 阅读详情

 

fa124607857 2019-12-11 17:24:29  11  已收藏
展开
Kafka集群操作
创建topic
bin/kafka-topics.sh --create  --partitions 3 --replication-factor 2 --topic test --zookeeper node01:2181,node02:2181,node03:2181
1
查看topic
 bin/kafka-topics.sh --list --zookeeper node01:2181,node02:2181,node03:2181
1
生产数据
bin/kafka-console-producer.sh --broker-list node01:9092,node02:9092,node03:9092 --topic test
1
消费数据
bin/kafka-console-consumer.sh --from-beginning  --topic test --zookeeper node01:2181,node02:2181,node03:2181
1
查看topic的一些信息
bin/kafka-topics.sh --describe  --topic test --zookeeper node01:2181
1
修改topic的配置属性
bin/kafka-topics.sh --zookeeper node01:2181 --alter --topic test --config flush.messages=1
1
删除topic
 bin/kafka-topics.sh --zookeeper node01:2181 --delete --topic test
1
kafka集群当中JavaAPI操作
kafka集群当中ProducerAPI
public class MyProducer {

    /**
     * 实现生产数据到kafka test这个topic里面去
     * @param args
     */
    public static void main(String[] args) {

        Properties props = new Properties();
        props.put("bootstrap.servers", "node01:9092");
        props.put("acks", "all");
        props.put("retries", 0);
        props.put("batch.size", 16384);
        props.put("linger.ms", 1);
        props.put("buffer.memory", 33554432);
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        //获取kafakProducer这个类
        KafkaProducer<String, String> kafkaProducer = new KafkaProducer<>(props);
        //使用循环发送消息
        for(int i =0;i<100;i++){
            kafkaProducer.send(new ProducerRecord<String, String>("test","mymessage" + i));
        }
        //关闭生产者
        kafkaProducer.close();
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
kafka集群当中的consumerAPI
消息的消费分为两种方式:

offset:offset记录了每个分区里面的消息消费到了哪一条,下一次来的时候,我们继续从上一次的记录接着消费

自动提交offset:

手动提交offset:

kafka的streamAPI
注意:如果程序启动的时候抛出异常,找不到文件夹的路径,需要我们手动的去创建文件夹的路径

kafkaAPI开发:

生产者API

消费者API:自动提交offset,手动提交offset。offset记录了我们数据的对应的long类型的数字

streamAPI:实现从一个topic里面获取数据,转换成为大写,写入到另外一个topic里面去

kafka的底层原理
生产者原理以及分区策略
生产者原理:主要就是研究如何将数据写入到kafka集群里面去,写入到某一个topic里面去之后,如何确定数据写入到哪一个分区里面去

一个topic里面有好多个分区,数据究竟写入到哪一个分区里面去???

生产数据三个必要的条件:

#1、地址
bootstrap.servers=node01:9092
#2、序列化 key.serializer=org.apache.kafka.common.serialization.StringSerializer value.serializer=org.apache.kafka.common.serialization.StringSerializer
#3、主题(topic) 需要制定具体的某个topic(order)即可。
1
2
3
4
默认的分区规则:

/**
 * The default partitioning strategy:
 * <ul>
 * <li>If a partition is specified in the record, use it
 * <li>If no partition is specified but a key is present choose a partition based on a hash of the key
 * <li>If no partition or key is present choose a partition in a round-robin fashion
 */
1
2
3
4
5
6
7
总结:如果指定了数据的分区号,那么数据直接生产到对应的分区里面去

如果没有指定分区好,出现了数据key,通过key取hashCode来计算数据究竟该落在哪一个分区里面

如果既没有指定分区号,也没有指定数据的key,使用round-robin轮询 的这种机制来是实现

创建topic 3 个分区,两个副本

bin/kafka-topics.sh --create  --partitions 3 --replication-factor 2 --topic mypartition --zookeeper node01:2181,node02:2181,node03:2181
1
kafka当中四种分区策略

 //分区策略第一种,如果既没有指定分区号,也没有指定数据key,那么就会使用轮询的方式将数据均匀的发送到不同的分区里面去
            //ProducerRecord<String, String> producerRecord1 = new ProducerRecord<>("mypartition", "mymessage" + i);
            //kafkaProducer.send(producerRecord1);

            //第二种分区策略 如果没有指定分区号,指定了数据key,通过key.hashCode  % numPartitions来计算数据究竟会保存在哪一个分区里面
            //注意:如果数据key,没有变化   key.hashCode % numPartitions  =  固定值  所有的数据都会写入到某一个分区里面去
            //ProducerRecord<String, String> producerRecord2 = new ProducerRecord<>("mypartition", "mykey", "mymessage" + i);
            //kafkaProducer.send(producerRecord2);

            //第三种分区策略:如果指定了分区号,那么就会将数据直接写入到对应的分区里面去
          //  ProducerRecord<String, String> producerRecord3 = new ProducerRecord<>("mypartition", 0, "mykey", "mymessage" + i);
           // kafkaProducer.send(producerRecord3);

            //第四种分区策略:自动以分区策略.如果不自定义分区规则,那么会将数据使用轮询的方式均匀的发送到各个分区里面去
              //配置我们自定义分区类
        props.put("partitioner.class","cn.itcast.kafka.partition.MyPartitioner");
            kafkaProducer.send(new ProducerRecord<String, String>("mypartition","mymessage"+i));


消费者底层原理以及各种消费的过程
自动提交offset

手动提交offset

处理完每个分区里面的数据之后,然后就进行一次提交offset

手动指定某些分区里面的数据进行消费:例如:有一个topic mypartition,里面有三个分区 ,需求:只需要消费其中两个分区里面的数据

消费者API总结:自动提交offset,手动提交offset,处理完每个分区里面的数据就进行提交offset,通过指定消费topic当中某些分区的数据

kafka当中数据丢失以及数据重复消费
kafka当中数据消费模型:

eactly once:消费且仅仅消费一次,可以在事务里面执行kafka的操作

at most once:至多消费一次,数据丢失的问题

at least once :至少消费一次,数据重复消费的问题

kafka的消费模式:决定了offset值保存在哪里
kafka的highLevel API进行消费:将offset保存在zk当中,每次更新offset的时候,都需要连接zk

以及kafka的lowLevelAP进行消费:保存了消费的状态,其实就是保存了offset,将offset保存在kafka的一个默认的topic里面。kafka会自动的创建一个topic,保存所有其他topic里面的offset在哪里

kafka将数据全部都以文件的方式保存到了文件里面去了。

kafka的数据保存形式
kafka里面一个topic有多个partition组成,每一个partition里面有多个segment组成,每个segment都由两部分组成,分别是.log文件和.index文件 。一旦.log文件达到1GB的时候,就会生成一个新的segment

.log文件:顺序的保存了我们的写入的数据

.index文件:索引文件,使用索引文件,加快kafka数据的查找速度

总结:查找数据的过程

第一步:通过offset确定数据保存在哪一个segment里面了,

第二部:查找对应的segment里面的index文件 。index文件都是key/value对的。key表示数据在log文件里面的顺序是第几条。value记录了这一条数据在全局的标号。如果能够直接找到对应的offset直接去获取对应的数据即可

如果index文件里面没有存储offset,就会查找offset最近的那一个offset,例如查找offset为7的数据找不到,那么就会去查找offset为6对应的数据,找到之后,再取下一条数据就是offset为7的数据

kafka如何保证数据不丢失
生产者:使用ack机制

broker:使用partition的副本机制

消费者:使用offset来进行记录

主分区与副本分区之间的数据同步:

两个指标,一个是副本分区与主分区之间的心跳间隔,超过10S就认为副本分区已经宕机,会将副本分区从ISR当中移除

主分区与副本分区之间的数据同步延迟,默认数据差值是4000条

例如主分区有10000条数据,副本分区同步了3000条,差值是7000 > 4000条,也会将这个副本分区从ISR列表里面移除掉
————————————————
原文链接:https://blog.youkuaiyun.com/fa124607857/article/details/103496294

Kafka Consumer底层原理分析【Kafka系列】 虽然目前Kafka0.10版本已经重写了其API,但底层原理是类似的,所以我们可以先了解kafka0.8.x里面的提供的Consumer的实现原理与交互流程 Kafka提供了两套API给Consumer The SimpleConsumer API The high-level Consumer API 本文介绍了这两种API的用法与底层原理 阅读详情

相关推荐

DOSBOX 0.74模拟器安装Windows 95

DosBox本身带有5.0版的DOS系统,启动后虚拟一个Z盘存放有Dosbox特有的外部指令,如config.com、imgmount.com等,经测试,可以顺利安装各版本的windows 3.1系统,但是不能安装win95,需要用原版的dos镜像启动才能安装。1. 获取启动盘镜像文件 下载Win95启动软盘镜像文件,名为boot.img,放到DosBox 0.74的目录下。2. 制作硬盘镜像文件

xjnzhidao的博客 9313

Kafka常用命令(1):kafka-topics

Kafka常用命令之:kafka-topics创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 kafka 的命令都在kafka的安装目录下的bin目录下,其中kafka-topics.sh主要与Topic操作有关的命令 可以通过命令...

thinking-fish的博客 2160

微信h5 支付,已经获得weixin://wap/pay?prepayid,但是无法调起微信客户端支付

结果几个接口,最终获得到到一直包含调起微信客户端的支付链接 但是直接打开这个页面,却不能调起微信客户端支付,原因是,在打开新页面的时候,需要设置a.rel = "noreferrer"; <body> <a href="javascript:void(0)" onclick="openNewWindowNoreferrer(this)">点击支付</a&...

qq_31683775的博客 4万+

读书笔记-kafka常用操作命令-kafka-topics.sh

1. 创建topic bin/kafka-topics.sh --zookeeper localhost:2181/kafka --create --topic topic-create --partitions 4 --replication-factor 2 返回结果:Created topic "topic-create". 参数解析 --zookeeper 指定kafka所连接的zookeeper服务地址 --topic 指定所要创建主题的名称 --replicator-factor

sailor_q的博客 4506

Rstudio安装org.Hs.eg.db

自己也是个小白,初次安装org.Hs.eg.db碰到好多问题,步骤总结如下: 第一,instal.packages()安装,不行则换 BiocManager::install() 第二,如BiocManager不成,说明不是最新版本,可按提示安装最新版 BiocManager::install(version = '3.13') #由于R版本较新,按照提示中的相关信息,安装最新版本的 第三,再次安装 BiocManager::install("org.Hs.eg.db") 第四,之后每个人.

ZH_DDong的博客 2万+

超声波测距的15度魔法:HC-SR04测量角度特性在机器人避障中的实战技巧

本文深入探讨了HC-SR04超声波测距模块在机器人避障中的15度测量角度特性及其应用技巧。通过分析15度角的工程意义、多模块阵列设计、狭小空间优化方案及温度补偿技术,帮助开发者提升机器人环境感知能力。文章特别强调了HC-SR04模块在低成本避障方案中的核心优势与实战优化策略。

weixin_29172963的博客 431

kafka-topics.sh --describe结果解释

&gt; bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic     Topic:my-replicated-topic    PartitionCount:1    ReplicationFactor:3    Configs:     Topic: my-replicat...

Be Simple 1万+

智能网联汽车电子电气架构(下)

从资产的表现形式, 可以分为数据、 软件、 硬件、 服务等, 而从需要保护的业务过程和活动、 所关注信息的角度, 资产类型可包括基于 ECU 的控制功能、 与特定车辆相关的信息、 车辆状态信息、 用户信息、 配置信息、 特定的软件、 内容等。面向新一代 EEA 的安全需求, 基于芯片提供的 OTP, 或SHE\HSM 的安全存储能力, 实现系统关键数据(身份、 密钥等关键信息) 的安全存储, 保证系统的关键数据不被盗取、 破坏、 改写。结合攻击者的动机与识别出的系统用例, 分析对汽车电子系统可能的攻击。

m0_58838529的博客 1473

【Kafka】kafka常用命令

kafka常用命令,kafka创建主题,kafka删除主题,kafka修改主题,kafka查看描述,kafka生产数据消费数据。

superone52033的博客 392

“华为杯”研究生数学建模竞赛2019年-【华为杯】D题:汽车行驶工况构建(附获奖论文和MATLAB代码实现)

映了汽车道路行驶的运动学特征。准差、加速度标准差这九个特征参数用于后续的数据分析,建立了合理的汽车运动特征评。特征参数与所属类特征参数的特征值的相关性大小替代误差进行排序的,计算得到汽车行。对于问题一,我们首先对原始数据进行了时间变量转换,将原本的年月日时分秒的计。紧接着进行了运动学片段的划分,引入九个特征参数,通过主成分分析、本文研究的是汽车行驶工况构建,汽车行驶工况是描述汽车行驶的速度。的合理性评价标准,对两种方法都进行了合理性评价,得到的。进行了合理性评价,得到了最优的汽车行驶工况曲线。

getusushu的博客 1004

⭐️VMwareWorkstation17.0虚拟机搭建WindowsXP虚拟机(完整安装步骤详细图文教程)

Windows XP是微软公司研发的计算机操作系统,于2001年10月25日正式发布。其名字中“XP”的意思来自英文中的“体验”(Experience)。Windows XP使用了Luna图形用户界面和双列开始菜单,提升了系统的安全性和工作性能,提供了WiFi支持,简化了软件的安装和运行,并增加了远程桌面功能。

Python老吕的博客 1万+

kafka常见命令集锦

目标 熟悉kafka各个组件的功能。 熟练使用zookeeper客户端操作kafka节点,通过命令的方式验证kafka各个组件之间的关联关系。 相关概念 Broker kafka节点,多个broker组成kafka集群。 Topic 即主题,kafka通过Topic对消息进行分类,发布到kafka的消息都需要指定Topic。 Producer 即消息生产者,向Broker发送消息的客户端。 Consumer 即消息消费者,从Broker消费消息的客户端。 ConsumerGroup

前者已逝,后者未至。 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Kafka底层原理分析

目录 1、Kafka源码部署 1.1 Scala环境变量 1.2 下载Kafka源码包 1.3 gradle编译部署 2、Kafka核心原理剖析 2.1 什么是分区 2.2 副本与ISR设计 2.3 日志设计 3、Kafka Server Reactor设计模型 3.1 认识Java NIO 4、Kafka 选举机制 4.1 控制器(Broker)选举 4.2 分区副本选举机制 5、Kafka HA设计解析 5.1 Replica均匀分布到整个集群 5.2 消息同步co.

长沙老码农 1462

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

深入了解Kafka底层原理

一、Kafka基础 1.kafka的基本运行原理?kafka的架构部署? (1)Kafka通过多副本机制实现故障自动转移; 2.kafka的文件存储机制? 3.kafka如何确保消息的精确传输?如何确保消息的准确存储?如何确保消息的正确消费? 4.kafka的常用名词? (1)LEO(LogEndOffset):表示每个partititon中最后一条message的位置; (2)HW...

Michaeles的博客 2368

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

深入探索Kafka底层原理

通过深入了解这些原理,我们可以更好地使用和优化Kafka,满足实时数据处理和分析的需求。在大数据和分布式系统的领域中,Apache Kafka因其高吞吐、低延迟、高可靠性以及可扩展性等特点而备受青睐。本文旨在深入剖析Kafka的底层原理,帮助读者更好地理解其内部机制和工作方式。Kafka使用Zookeeper作为元数据管理和协调服务,确保副本之间的数据一致性和故障恢复。Kafka的底层存储机制是其高性能的关键所在。Kafka的消息传输主要涉及生产者和消费者与Broker之间的交互。

i289292951的博客 928

Kafka底层原理探秘

Kafka 是一个分布式流处理平台由 LinkedIn 公司开发的,遵循 Apache 开源协议。Kafka 主要是用来处理实时数据流,可以发布、订阅、存储和处理数据。日志收集:用于分布式日志系统,例如 ELK。消息系统:可以将 Kafka 作为消息队列使用。流处理:将 Kafka 与 Flink 或 Spark 等流处理引擎配合使用。Producer:发送数据到 Kafka 集群。Consumer:从 Kafka 集群消费数据。

BXA 1875

【Kafka系列】第二篇| Kafka 的核心概念、架构设计、底层原理

摘要:Kafka作为高性能分布式消息队列,在系统解耦和实时处理中发挥关键作用。本文剖析了Kafka的核心概念,包括生产者、消费者、主题分区等组件;详细阐述了其分布式架构设计,包括传统ZooKeeper模式和新型KRaft模式的区别;深入解析了消息存储、副本同步、消费者组重平衡等底层机制。Kafka通过分区化设计、ISR副本同步等创新机制,实现了高吞吐、高可靠的消息传递,其架构演进也展现了从依赖外部协调到自管理的发展趋势。

会飞的架狗师的博客 1298

10分钟搞懂kafka底层原理

1、背景引入:消息队列是什么 现代技术的实时更新,已经实时性的要求越来越高,因此对技术的要求也是越来越高,那么在庞大的数据的传输过程中怎么能保证数据的快速传递呢,由此,消息队列产生了。 “消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。 消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它...

baishuyk的博客 3690

Kafka底层原理架构

1、Kafka 核心组件概述 Kafka 是 LinkedIn 用于日志处理的分布式消息队列,同时支持离线和在线日志处理。 Kafka 对消息保存时根据 Topic 进行归类: 发送消息者就是 Producer,消息的发布描述为 Producer 消息接受者就是 Consumer,消息的订阅描述为 Consumer 每个 Kafka 实例称为 Broker,将中间的存储阵列称作 Broker(代...

qichangjian的博客 9874

Kafka原理+操作+实战

kakfa原理,kafka机制,kafak使用,kafka api使用, Kafka原理+操作+实战+api

myself_ning的博客 3353

Kafka底层原理和使用

Kafka 为极致吞吐和流处理场景而生,其零拷贝、顺序写、无状态、高并发架构使其在性能上普遍高于 RocketMQ,而 RocketMQ 更强调灵活性、事务支持和一致性保障。如果你要选型:应用场景推荐日志收集 / 实时分析✅ Kafka金融 / 事务强一致场景✅ RocketMQ复杂过滤 / 多业务场景✅ RocketMQ流处理 / 大数据平台✅ Kafka。

2301_79584629的博客 1393

Kafka 底层原理分析学习笔记

Kafka是一种用Scala和Java开发的分布式消息系统,具备高性能、高可靠、高吞吐和可伸缩等特点,适用于大数据场景下的分布式数据交换。其核心组件包括生产者、消费者、Broker服务器和Topic主题,采用多Broker部署、分区存储、多副本机制等设计保证可靠性。Kafka依赖ZooKeeper进行集群管理,通过临时节点和监听机制实现Controller的选举和故障转移。当Broker启动时,会在ZooKeeper注册节点信息,首个启动的Broker成为Controller,负责集群状态管理和节点间通信。

多思考🤔~ 1479

剖析Kafka持久化底层原理

解决大量数据的实时传输问题。这需要kafka系统支持分区,分布式,实时处理接收到的数据。此外,当数据被送到其他服务系统中时,kafka系统在机器出现问题是还必须有容错性保证。从某种程度上理解,kafka系统更像是一个日志数据库。

sosovo66的博客 1316
上一篇: Zookeeper端口和ip修改
下一篇: KafkaConsumer实现精确一次消费
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值