topic

kafka深入研究之路(1)-剖析各原理02

只谈情不闲聊 提交于 2019-11-28 11:30:46
kafka深入研究之路(1)-剖析各原理02 接着上一文的内容 继续升入研究 topic如何创建于删除的 topic的创建 具体流程文字为: 1、 controller 在 ZooKeeper 的 /brokers/topics 节点上注册 watcher,当 topic 被创建,则 controller 会通过 watch 得到该 topic 的 partition/replica 分配。 2、 controller从 /brokers/ids 读取当前所有可用的 broker 列表,对于 set_p 中的每一个 partition: 2.1、 从分配给该 partition 的所有 replica(称为AR)中任选一个可用的 broker 作为新的 leader,并将AR设置为新的 ISR 2.2、 将新的 leader 和 ISR 写入 /brokers/topics/[topic]/partitions/[partition]/state 3、 controller 通过 RPC 向相关的 broker 发送 LeaderAndISRRequest。 注意:此部分 和 partition 的leader选举过程很类似 都是需要 zk参与 相关信息都是记录到zk中 controller在这些过程中启到非常重要的作用。 topic的删除 文字过程: 1、 controller

Kafka-consumer与Topic分区及consumer处理超时

妖精的绣舞 提交于 2019-11-28 11:01:29
概念: 消费者组:Consumer Group ,一个Topic的消息能被多个消费者组消费,但每个消费者组内的消费者只会消费topic的一部分 再均衡rebalance:分区的所有权从一个消费者转移到另一个消费者 消费者通过被指派为群组协调器的broker(不同的群组可以有不同的协调器) 发送心跳来维持它们和群组的从属关系以及它们对分区的所有权关系。只要消费者以正常的时间间隔发送心跳,就被认为是活跃的,说明它还在读取分区里的消息。消费者会在轮询消息或提交偏移量时发送心跳。如果消费者停止发送心跳的时间足够长,会话就会过期,群组协调器认为它已经死亡,就会触发一次再均衡。 分配分区的过程: 当消费者要加入群组时,它会向群组协调器发送一个JoinGroup请求。第一个加入群组的消费者将成为“群主”ConsumerCoordinator。群主从协调器哪里获得群组的成员列表(列表中包含了所有最近发送过心跳的消费者,它们被认为是活跃的),并负责给每一个消费者分配分区。它使用一个实现了PartitionAssignor接口的类来决定哪些分区应该被分配给哪个消费者。 分配完毕后,群主把分配情况列表发送给群组协调器,协调器再把这些信息发送给所有消费者。每个消费者只能看到自己的分配信息,只有群主知道群组里所有消费者的分配信息。 这个过程会在每次再均衡时重复发生。 使用kafka Tool 观察kafka

Rocket MQ简介

ⅰ亾dé卋堺 提交于 2019-11-28 10:51:33
一、概念 1. 中间件:位于系统之间的服务 2. 消息中间件:消息队列MQ,用于接收消息、存储消息、转发消息的中间件 3. Rocket MQ: 分布式的消息中间件,生产者、消费者、队列都可以分布式 二、RocketMQ使用 1. 在服务器上安装Rocket MQ 2. 启动rocket mq,即name server 3. 启动broker, 设置对应的name server 4. 消费者代码 public class Consumer { public static void main(String[] args) throws InterruptedException, MQClientException { //声明并初始化一个consumer //需要一个consumer group名字作为构造方法的参数,这里为consumer1 DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer1"); //同样也要设置NameServer地址 consumer.setNamesrvAddr("10.1.54.121:9876;10.1.54.122:9876"); //这里设置的是一个consumer的消费策略 //CONSUME_FROM_LAST_OFFSET 默认策略,从该队列最尾开始消费

【转】c++(11)使用librdkafka库实现kafka的消费实例

五迷三道 提交于 2019-11-28 10:33:01
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/lijinqi1987/article/details/76691170 librdkafka在c语言的基础上封装了一层c++的API,可以实现kafka的消费操作,基本操作步骤如下 1、创建kafka 配置 RdKafka::Conf *conf = nullptr; conf = RdKafka::Conf::create(RdKafka::Conf::CONF_GLOBAL); 2、设置kafka各项参数 /*设置broker list*/ conf->set("bootstrap.servers", brokers_, errstr); /*设置consumer group*/ conf->set("group.id", groupid_, errstr); /*每次从单个分区中拉取消息的最大尺寸*/ conf->set("max.partition.fetch.bytes", strfetch_num, errstr); 3、创建kafka topic配置 RdKafka::Conf *tconf = nullptr; tconf = RdKafka::Conf::create(RdKafka::Conf:

Kafka SCRAM和PLAIN实战

这一生的挚爱 提交于 2019-11-28 10:20:59
1.概述 目前Kafka ACL支持多种权限认证,今天笔者给大家介绍一下SCRAM和PLAIN的权限认证。验证环境如下: JDK:1.8 Kafka:2.3.0 Kafka Eagle: 1.3.8 2.内容 2.1 PLAIN认证 首先,在$KAFAK_HOME/config目录新建一个文本文件,名为kafka_server_plain_jaas.conf,配置内容如下: KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin-secret" user_admin="admin-secret" user_ke="ke"; }; 接着,将脚本文件kafka-server-start.sh重命名为kafka-server-plain-start.sh,并修改最后一行的内容为: # 添加鉴权文件 exec $base_dir/kafka-run-class.sh $EXTRA_ARGS -Djava.security.auth.login.config=$base_dir/../config/kafka_server_plain_jaas.conf kafka.Kafka "$@" 然后,复制server

MQ: kafka的Java接入与入门示例(topic增删改查,Producer多参发送,Consumer多分区接受)

夙愿已清 提交于 2019-11-28 08:12:39
本文主要通过实际编码来对 《MQ: 一张图读懂kafka工作原理》 提到的部分原理进行验证与实现。 相关文章参考: MQ: 消息队列常见应用场景及主流消息队列ActiveMQ、RabbitMQ、RocketMQ和Kafka的简单对比 MQ: 一张图读懂kafka工作原理 1.版本说明 后续代码依赖于以下版本,其他版本不保证代码可用: kafka 服务版本:2.11-1.0.1 kafka-clients.jar 版本:2.2.0 spring-kafka.jar 版本:1.3.5.RELEASE spring-boot 版本:1.5.10.RELEASE 2.kafka接入 pom.xml 先引入kafka的spring依赖包,这个包提供Producer和Consumer相关的操作。 < dependency > < groupId > org.springframework.kafka </ groupId > < artifactId > spring-kafka </ artifactId > < version > 1.3.5.RELEASE </ version > </ dependency > 如果想进行Topic、Partition相关的操作,则引入下面的包: < dependency > < groupId > org.apache.kafka </

4、spark streaming+kafka

◇◆丶佛笑我妖孽 提交于 2019-11-28 08:10:56
一、Receiver模式 1、 receiver模式原理图 在SparkStreaming程序运行起来后,Executor中会有receiver tasks接收kafka推送过来的数据。数据会被持久化,默认级别为MEMORY_AND_DISK_SER_2,这个级别也 可以修改。receiver task对接收过来的数据进行存储和备份,这个过程会有节点之间的数据传输。备份完成后去zookeeper中更新消费偏移量,然后向Driver中的 receiver tracker汇报数据的位置。最后Driver根据数据本地化将task分发到不同节点上执行。 2、receiver模式中存在的问题及解决 当Driver进程挂掉后,Driver下的Executor都会被杀掉,当更新完zookeeper消费偏移量的时候,Driver如果挂掉了,就会存在找不到数据的问题,相当于丢失数据。 如何解决这个问题? 开启WAL(write ahead log)预写日志机制,在接受过来数据备份到其他节点的时候,同时备份到HDFS上一份(我们需要将接收来的数据的持久化级别降级到MEMORY_AND_DISK), 这样就能保证数据的安全性。不过,因为写HDFS比较消耗性能,要在备份完数据之后才能进行更新zookeeper以及汇报位置等,这样会增加job的执行时间,这样对于任务的 执行提高了延迟度。 3

mybatis-plus简单了解

泄露秘密 提交于 2019-11-28 07:46:07
mybatis-plus入门了解和简单使用 MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 特性 : 无侵入 :只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小 :启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作 强大的 CRUD 操作 :内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求 支持 Lambda 形式调用 :通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错 支持主键自动生成 :支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题 支持 ActiveRecord 模式 :支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作 支持自定义全局通用操作 :支持全局通用方法注入( Write once, use anywhere ) 内置代码生成器 :采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用 内置分页插件

3、kafka工作流程

家住魔仙堡 提交于 2019-11-28 07:41:59
一、kafka各成员 kafka: 分布式消息系统,将消息直接存入磁盘,默认保存一周。 broker: 组成kafka集群的节点,之间没有主从关系,依赖zookeeper来协调,broker负责满息的读写和存储,一个broker可以管理多个partition. producer: 消息的生产者,自己决定向哪个partition中去生产消息,两种机利:hash,轮循。 consumer: 消息的消费者,consumer通过zookeeper去维护消费者偏移量。consumer有自己的消费者组,不同的组之间消费同一个topic数据,互不影响, 相同的组内的不同的consumer消费同一个topic,这个topic中相同的数据只能被消费一次。 topic: 一类消息总称/一个消息队列。topic是由partition组成的,有多少?-> 创建指定。 partition: 组成topic的单元,每个partition有副本,有多少?-> 创建topic时指定。每个partition只能由一个broker来管理,这个broker就是这个partition的leader。 zookeeper: 协调kafka broker,存储原数据:consumer的offset+broker信息+topic信息+partition信息; 二、分析zookeeper元数据存储 1、创建topic [root

Storm整合Kafka Java API源码

被刻印的时光 ゝ 提交于 2019-11-28 07:07:22
1.Maven项目的pom.xml源码如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.yg</groupId> <artifactId>storm</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>storm</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.apache.storm</groupId>