![](https://img-blog.csdnimg.cn/20200613152324143.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
从头开始学Kafka
本专栏系统地梳理了Kafka的各个核心知识点,并对其进行讲解和演示。
lwen.steven
学好Java,为公司“添砖加瓦”!
展开
-
6.5 Kafka集群之Leader选举
1.Broker选举kafka并没有采用多数投票来选举leader的(redis和es采用的是多数投票方式来进行选举的),原因有两个,一是防止选举时选举到了数据不全的broker,二是当选举没有通过一轮产生时,需要额外的第二轮、第三轮甚至更多的轮次,比较耗时间。由于kafka集群依赖zookeeper集群,所以最简单的方案是所有follower都在zookeeper上设置一个watch。第一个启动的broker会在zookeeper中创建临时的controller节点,其它broker启动时会尝试创建c原创 2021-08-27 23:49:39 · 320 阅读 · 0 评论 -
6.4 Kafka集群之副本集
1.简介Kafka的数据是存储在日志文件中的,Kafka副本集(副本因子)是指将这些日志文件复制多份从而起到数据备份的目的。Kafka中的Topic只是个逻辑概念,实际存储数据的是Partition,所以真正被复制的也是Partition。2.特点(1).Kafka可以通过配置设置默认的副本集数量(2).Kafka可以为每个Topic设置副本集,所以副本集是相对于Topic的(3).一个Topic的副本集可以分布在多个Broker中,当一个Broker挂掉了,其他的Broker上还有数据,这就提高原创 2021-08-27 23:49:18 · 315 阅读 · 0 评论 -
6.1 Kafka集群之基本概念
1.基本概念broker:一般指Kafka的部署节点leader:用于处理消息的接收和消费等请求follower:主要用于备份消息数据2.拓扑图kafka集群的原数据通过zookeeper获取在brokers的一排中,同一个topic的同一个partition只能有一个leader,同一个leader会有多个follower红线表示管理流,从zookeeper中注册或者获取消息,绿线表示数据的同步producer和consumer都是与leader进行数据交互的3.Kafka节点故障原创 2021-08-23 23:44:32 · 276 阅读 · 0 评论 -
6.2 Kafka集群之Linux下单机部署
1.ZooKeeper搭建(1).安装首先从官网下载zookeeper压缩包,然后解压并命名为zookeeper,最后移动到/usr/local目录下。(2).在zookeeper目录下新建data、logs目录,分别用来存放数据和日志原创 2021-08-21 16:41:48 · 288 阅读 · 0 评论 -
5.3 Kafka Streams API之算子演示
1.代码示例public class StreamSample { private static final String TOPIC_INPUT = "steven-stream-in"; private static final String TOPIC_OUT = "steven-stream-out"; public static void main(String[] args) { //Stream配置 Properties props原创 2021-08-08 16:49:32 · 167 阅读 · 0 评论 -
5.2 Kafka Streams API之统计单词
1.代码示例(1).添加依赖<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-streams</artifactId> <version>2.3.0</version></dependency>(2).代码public class StreamSample { private static final S原创 2021-08-08 16:33:55 · 462 阅读 · 0 评论 -
5.1 Kafka Streams API之概述
1.简介Stream是处理分析存储在Kafka数据的客户端程序库,其通过state store可以实现高效状态操作,并且支持原语Processor和高层抽象DSL。2.结构图从结构图中可以看到数据的流向,首先会有消费者消费partition中的数据,经过流处理之后,会经由生产者推给其它topic的partition。3.核心概念(1).流拓扑图结构图Task1-1中,圆圈表示流处理器,箭头表示数据流,数据流之间的关系图叫做流拓扑图。(2).流和流处理器流是指数据流,流处理器是指对数据流做的原创 2021-08-08 12:02:28 · 199 阅读 · 0 评论 -
4.6 Kafka Consumer API之控制偏移量的起始位置
1.简介手动指定offset起始位置的应用场景主要有两个,一是人为控制offset起始位置,二是如果出现程序错误,重复消费一次。2.代码示例public class ConsumerSample { private static final String topicName = "steven"; public static void main(String[] args) { //Consumer配置 Properties props = new P原创 2021-08-07 18:23:00 · 361 阅读 · 0 评论 -
4.5 Kafka Consumer API之多线程并发处理
1.consumer一对一消费partition(1).简介这种类型是经典模式,每一个线程单独创建一个KafkaConsumer消费一个partition,用于保证线程安全。(2).代码示例public class KafkaConsumerRunner implements Runnable { private static final String topicName = "steven"; //状态开关,如果值为false则进行线程任务处理 private final原创 2021-08-07 18:03:27 · 385 阅读 · 0 评论 -
4.4 Kafka Consumer API之手动控制一个或多个分区的消费
1.代码示例public class ConsumerSample { private static final String topicName = "steven"; public static void main(String[] args) { //Consumer配置 Properties props = new Properties(); props.setProperty("bootstrap.servers", "127.0原创 2021-08-07 17:28:05 · 269 阅读 · 0 评论 -
4.3 Kafka Consumer API之单个分区提交偏移量
1.代码示例public class ConsumerSample { private static final String topicName = "steven"; public static void main(String[] args) { //Consumer配置 Properties props = new Properties(); props.setProperty("bootstrap.servers", "127.0原创 2021-08-07 16:43:28 · 142 阅读 · 0 评论 -
4.2 Kafka Consumer API之手动提交偏移量
(1).控制台输出运行异步发送示例代码向Kafka发送10条数据,然后再执行ConsumerSample代码进行消费,便可在控制台看见代码中指定的输出信息。停止ConsumerSample后,再次运行ConsumerSample,如果上一次消息消费全部成功,发现本次不会再输出任何内容。原创 2021-08-07 15:35:13 · 800 阅读 · 0 评论 -
4.1 Kafka Consumer API之自动提交偏移量
1.简介(1).提交位移Consumer需要向Kafka汇报自己的位移数据,这个汇报过程被称为提交位移。因为Consumer能够同时消费多个分区的数据,所以位移的提交实际上是在分区粒度上进行的,即Consumer需要为分配给它的每个分区提交各自的位移数据。提交位移主要是为了表示Consumer的消费进度,这样当Consumer发生故障重启之后,就能够从Kafka中读取之前提交的位移值,然后从相应的位移处继续消费,从而避免整个消费过程重来一遍。从用户的角度来说,位移提交分为自动提交和手动提交,但从Co原创 2021-08-07 14:41:33 · 445 阅读 · 0 评论 -
3.6 Kafka Producer API之消息传递保障
1.传递保障在一个分布式发布订阅消息系统中,组成系统的计算机总会由于各自的故障而不能正常工作。在Kafka中,一个单独的broker,可能会在生产者发送消息到一个topic的时候宕机,或出现网络故障,从而导致生产者发送消息失败。Kafka提供了三种传递保障来解决上述问题,其依赖Producer和Consumer共同实现,主要依赖于Producer,在代码中由“properties.put(ProducerConfig.ACKS_CONFIG, “all”);”体现。(1).0最多一次,收到0或者1次消原创 2021-08-03 22:50:18 · 345 阅读 · 0 评论 -
3.5 Kafka Producer API之自定义分区负载均衡
1.代码示例public class PartitionSample implements Partitioner { @Override public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) { //key-1,key-2 String keyStr = key + "";原创 2021-08-03 22:24:03 · 191 阅读 · 0 评论 -
3.4 Kafka Producer API之发送原理
1.发送原理Producer发送原理主要分为两步,第一步是构建Producer对象,第二步是发送消息,详细步骤如下图所示。(1).首先要构造一个ProducerRecord对象,该对象可以声明主题(topic)、分区(partition)、键(key)以及值(value),主题和值是必须要声明的,分区和键可以不用指定。(2).调用send()方法进行消息发送。(3).因为消息要到网络上进行传输,所以必须进行序列化,序列化器的作用就是把消息的key和value对象序列化成字节数组。(4).接下来数原创 2021-08-03 22:13:36 · 148 阅读 · 0 评论 -
3.3 Kafka Producer API之异步回调发送
1.代码示例public class ProducerSample { private static final String topicName = "steven"; /** * Producer异步发送示例 */ public static void producerSend() throws ExecutionException, InterruptedException { //Producer配置 Propertie原创 2021-08-03 19:49:22 · 179 阅读 · 0 评论 -
3.2 Kafka Producer API之异步阻塞发送
1.代码示例public class ProducerSample { private static final String topicName = "steven"; /** * Producer异步发送示例 */ public static void producerSend() throws ExecutionException, InterruptedException { //Producer的配置 Propert原创 2021-08-03 19:37:00 · 184 阅读 · 0 评论 -
3.1 Kafka Producer API之异步发送
1.代码示例public class ProducerSample { private static final String topicName = "steven"; /** * Producer异步发送示例 */ public static void producerSend() { //Producer配置 Properties properties = new Properties(); proper原创 2021-08-02 19:24:58 · 150 阅读 · 0 评论 -
2.8 Kafka Admin API之增加分区
1.代码示例public class AdminSample { private static final String topicName = "steven"; private static final int partitionNumber = 1; private static final Short replicationFactor = 1; /** * 创建AdminClient */ public static AdminC原创 2021-08-02 00:15:55 · 381 阅读 · 0 评论 -
2.7 Kafka Admin API之修改主题配置信息
1.代码示例public class AdminSample { private static final String topicName = "steven"; private static final int partitionNumber = 1; private static final Short replicationFactor = 1; /** * 创建AdminClient */ public static AdminC原创 2021-08-02 00:13:59 · 268 阅读 · 0 评论 -
2.6 Kafka Admin API之查看主题配置信息
1.代码示例public class AdminSample { private static final String topicName = "steven"; private static final int partitionNumber = 1; private static final Short replicationFactor = 1; /** * 创建AdminClient */ public static AdminC原创 2021-08-02 00:13:07 · 328 阅读 · 0 评论 -
2.5 Kafka Admin API之查看主题描述信息
1.代码示例public class AdminSample { private static final String topicName = "steven"; private static final int partitionNumber = 1; private static final Short replicationFactor = 1; /** * 创建AdminClient */ public static AdminC原创 2021-08-02 00:12:25 · 350 阅读 · 0 评论 -
2.4 Kafka Admin API之删除主题
1.代码示例public class AdminSample { private static final String topicName = "steven"; private static final int partitionNumber = 1; private static final Short replicationFactor = 1; /** * 创建AdminClient */ public static AdminC原创 2021-08-02 00:11:34 · 382 阅读 · 3 评论 -
2.3 Kafka Admin API之查询主题
1.代码示例public class AdminSample { private static final String topicName = "steven"; private static final int partitionNumber = 1; private static final Short replicationFactor = 1; /** * 创建AdminClient */ public static AdminC原创 2021-08-02 00:08:02 · 163 阅读 · 0 评论 -
2.2 Kafka Admin API之创建主题
1.代码示例public class AdminSample { private static final String topicName = "steven"; private static final int partitionNumber = 1; private static final Short replicationFactor = 1; /** * 创建AdminClient */ public static AdminC原创 2021-08-02 00:02:15 · 389 阅读 · 0 评论 -
2.1 Kafka Admin API之创建客户端
1.Admin APIAPI作用AdminClientAdminClient客户端对象NewTopic创建topicCreateTopicsResult创建topic的返回结果ListTopicsResult查询topic列表ListTopicsOptions查询topic列表及选项DescribeTopicsResult查询topicDescribeConfigsResult查询topic配置项2.创建AdminClient客户原创 2021-08-02 00:01:02 · 697 阅读 · 0 评论 -
1.3 Kafka概述之环境搭建
1.Mac环境下Kafka的安装首先从官网下载Kafka压缩包,然后解压下载得到的Kafka压缩包。2.环境变量配置进入家目录,执行vim .bash_profile命令进行环境变量配置,配置项如下。export ZK_HOME = /Users/wenlei/zookeeper-3.4.10export PATH = $ZK_HOME/bin:$PATHexport KAFKA_HOME = /Users/wenlei/kafka_2.11-0.9.0.1export PATH = $KAF原创 2021-08-01 23:58:58 · 164 阅读 · 0 评论 -
1.2 Kafka概述之ZooKeeper
1.Mac环境下ZooKeeper的安装首先从官网下载ZooKeeper压缩包,然后解压,在根目录下可以看到bin、conf、lib等目录。bin目录中存放的是脚本文件,conf目录中存放的是配置文件,lib目录中存放的是第三方库文件。2.配置在conf目录下,新建一个名为zoo.cfg的文件,核心配置如下。tickTime = 2000 dataDir = /usr/myenv/zookeeper-3.4.8/data dataLogDir = /usr/myenv/zookeeper-3.4原创 2021-08-01 23:57:40 · 124 阅读 · 0 评论 -
1.1 Kafka概述之基本概念
1.简介Kafka是Apache开发的一种分布式的发布-订阅消息系统。其特点有以下两点,一是快速,每秒可以生产25万条消息(50MB),处理55万条数据(110MB)。二是持久化存储数据,并可以在集群中复制,防止数据丢失。2.术语(1).主题(topic)一组消息的归纳。一个Kafka集群中可以创建多个主题,以主题为单位来管理消息,主题之间互相隔离,互不影响。(2).分区(partition)主题中还可以划分出多个分区,以分区为单位对主题中的数据进行存储和备份,消息的实际存储单位。(3).se原创 2021-08-01 23:56:37 · 157 阅读 · 0 评论 -
从头开始学Kafka
第一章 Kafka概述1.1 Kafka之基本概念1.2 Kafka之ZooKeeper1.3 Kafka之环境搭建第二章 Kafka之Admin API2.1 创建客户端AdminClient2.2 创建主题topic2.3 查询主题topic2.4 删除主题topic2.5 查看主题描述信息2.6 查看主题配置信息2.7 修改配置信息config2.8 增加分区partition第三章 Kafka之Producer API3.1 异步发送3.2 异步阻塞发送3.3 异步回原创 2021-08-01 23:52:15 · 107 阅读 · 0 评论