一、地址

1、实时更新的思维导图

https://www.mubucm.com/doc/4uqlpedefuj

2、图片

二、具体内容

  •  
    5.producer生产者
    •  
      demo
      •  
        发送pro.send(new ProducerRecord<String,String>("test","123"))
      •  
        ProducerRecord的属性
        •  
          重载方法234
          •  
            只topic和内容
          •  
            多key
            •  
              hash(key)确定发送的分区
          •  
            多key和partition
            •  
              key不起作用,发到指定分区
        •  
          topic
        •  
          partiton
        •  
          headers
        •  
          K
          •  
            用于hash计算分区
        •  
          V
          •  
            发送的消息值
        •  
          timestamp
      •  
        ack应答机制
        •  
          用于保证数据发送可靠
    •  
      必要参数
      •  
        bootstrap.servers:整个集群的地址
    •  
      发送模式
      •  
        发后即忘
        •  
          producer.send(rcd)
      •  
        同步发送sync
        •  
          send(rcd).get()
      •  
        异步发送async
        •  
          send(rcd,new CallBack(){onCompletion(){xxxx}})
  •  
    6.consumer消费者
    •  
      demo
      •  
        订阅多个topic
      •  
        poll(time超时时间)获取消息ConsumerRecord
      •  
        record包含的内容.get
        •  
          offset
        •  
          key
        •  
          value
    •  
      必要参数
      •  
        group id
      •  
        bootstrap.servers
        •  
          无需设置整个集群,只需设置单个
    •  
      消息订阅
      •  
        subscribe订阅
        •  
          重载方法*4
        •  
          ConsumerRebalanceListener再均衡监听器?
        •  
          方式
          •  
            指定集合方式
          •  
            正则方式订阅
            •  
              传参Pattern.compile("ods_*")
      •  
        assign订阅
        •  
          consumer.assign(Collection<TopicPartition> collection)
        •  
          可以手动订阅多个topic的指定分区
        •  
          单个:Arrays.asList(new TopicPartition("topic1",0))
      •  
        区别
        •  
          粒度
          •  
            topic粒度(group管理)
          •  
            topic-partition粒度(自己管理)
        •  
          是否具有rebalance分区再均衡功能
      •  
        取消订阅
        •  
          consumer.unsubscribe()
        •  
          subscribe(new ArrayList<T>())
          •  
            String
          •  
            TopicPatition
    •  
      消费模式
      •  
        拉取模式poll(time)
        •  
          time为阻塞时间(多久拉一次)
        •  
          设置为Long.MAX_VALUE,可以提高吞吐率
      •  
        消息类型ConsumerRecord
        •  
          ConsumerRecords<String,String> records=consumer.poll(100)
        •  
          ConsumerRecord rd=records.record(new TopicPartition("topic1",0))
    •  
      提交偏移量
      •  
        指定位移消费
        •  
          consumer.seek(TopicPartition,offset)
      •  
        自动提交
        •  
          两个配置
          •  
            auto.commit
          •  
            interval.ms
            •  
              到点提交各分区最大位移
          •  
            默认true,5000
        •  
          存在问题
          •  
            重复消费
            •  
              消费者崩溃
          •  
            丢失消息
            •  
              拉取消息放入阻塞队列BlockingQueue
            •  
              阻塞队列的处理线程异常,从上次提交的位移处消费
            •  
              即实际消费到了3,已经提交了6
      •  
        手动提交
        •  
          调用API实现
          •  
            关闭自动提交:auto.commit设为false
          •  
            类型
            •  
              同步提交
              •  
                commitSync()-处理完提交(提交和拉取会阻塞)
              •  
                含参commitAsync(Map<TopicPatition,OffsetAndMetaData>)
              •  
                record获取offset,+1后作为Meta构造参数
              •  
                提交的偏移量是消费完record的偏移量+1
            •  
              异步提交
              •  
                提交和拉取不会阻塞,提高消费者性能
              •  
                重载的commitAsync
                •  
                  commitAsync()
                •  
                  commitAsync(OffsetCommitCallback)-带回调
                •  
                  commitAsync(Map<TopicPatition,OffsetAndMetaData>,OffsetCommitCallback)-指定分区&偏移量+回调
        •  
          手动提交的时机
          •  
            处理完成前提交
            •  
              存在漏处理(数据丢失)
            •  
              实现了at most once语义
          •  
            处理完成后提交
            •  
              存在重复处理/消费(数据重复)
            •  
              原因:处理后提交前出bug
            •  
              实现了at least once语义
          •  
            理想语义:Exactly once(精确一次)
            •  
              ★通过kafka的事务机制实现
      •  
        提交方式总结
        •  
          全自动
        •  
          半自动
        •  
          全手动
        •  
          提交的位置:__consumer_offset
    •  
      重要参数介绍
      •  
        一次拉取的最大最小数据量
      •  
        拉取的最大等待时长
      •  
        每个分区拉取的最大数据量
      •  
        一次拉取的最大条数
      •  
        等待请求响应、闲置、重试间隔
      •  
        消息隔离级别:读未提交或已提交
        •  
          read_uncommit:能消费到LSO
        •  
          read_committed:可以消费到HW
      •  
        超时时长,超过认为消费者已离开cg
  •  
    7.topic管理
    •  
      工具类KafkaAdminClient
      •  
        用于集成内部系统,实现多功能的生态平台
      •  
        功能:管理broker、配置、ACL、管理topic
      •  
        创建方式:KafkaAdminClient.create(props)
    •  
      列出主题
      •  
        listTopics()
    •  
      查看主题信息
      •  
        describeTopics(Arrays.asList(xx,yy))
    •  
      创建主题
      •  
        createTopics(new NewTopic(name,replicaAssignment))
    •  
      删除主题
      •  
        deleteTopics(Arrays.asList(xx,yy))
    •  
      其他管理
      •  
        动态参数管理
        •  
          修改配置:alterConfigs(Map<ConfigResource,Config>)
      •  
        分区管理
        •  
          新增分区:createPartitions(Map<String,NewPartitions> map)
以上内容整理于幕布文档

Kafka教程(二)API开发-生产者、消费者、topic的更多相关文章

  1. Hadoop生态圈-Kafka的旧API实现生产者-消费者

    Hadoop生态圈-Kafka的旧API实现生产者-消费者 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.旧API实现生产者-消费者 1>.开启kafka集群 [yinz ...

  2. Hadoop生态圈-Kafka的新API实现生产者-消费者

         Hadoop生态圈-Kafka的新API实现生产者-消费者 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  3. Kafka 教程(二)-安装与基础操作

    单机安装 1. 安装 java 2. 安装 zookeeper [这一步可以没有,因为 kafka 自带了 zookeeper] 3. 安装 kafka 下载链接 kafka kafka 是 scal ...

  4. 使用Win32 API实现生产者消费者线程同步

    使用win32 API创建线程,创建信号量用于线程的同步 创建信号量 语法例如以下 HANDLE semophore; semophore = CreateSemaphore(lpSemaphoreA ...

  5. RabbitMQ入门学习系列(二),单生产者消费者

    友情提示 我对我的文章负责,发现好多网上的文章 没有实践,都发出来的,让人走很多弯路,如果你在我的文章中遇到无法实现,或者无法走通的问题.可以直接在公众号<爱码农爱生活 >留言.必定会再次 ...

  6. 【Windows】用信号量实现生产者-消费者模型

    线程并发的生产者-消费者模型: 1.两个进程对同一个内存资源进行操作,一个是生产者,一个是消费者. 2.生产者往共享内存资源填充数据,如果区域满,则等待消费者消费数据. 3.消费者从共享内存资源取数据 ...

  7. Python 使用python-kafka类库开发kafka生产者&消费者&客户端

    使用python-kafka类库开发kafka生产者&消费者&客户端   By: 授客 QQ:1033553122       1.测试环境 python 3.4 zookeeper- ...

  8. Kafka技术内幕 读书笔记之(三) 生产者——消费者:高级API和低级API——基础知识

    1. 使用消费组实现消息队列的两种模式 分布式的消息系统Kafka支持多个生产者和多个消费者,生产者可以将消息发布到集群中不同节点的不同分区上:消费者也可以消费集群中多个节点的多个分区上的消息 . 写 ...

  9. centos7单机安装kafka,进行生产者消费者测试

    [转载请注明]: 原文出处:https://www.cnblogs.com/jstarseven/p/11364852.html   作者:jstarseven    码字挺辛苦的.....  一.k ...

  10. kafka集群搭建和使用Java写kafka生产者消费者

    1 kafka集群搭建 1.zookeeper集群  搭建在110, 111,112 2.kafka使用3个节点110, 111,112 修改配置文件config/server.properties ...

随机推荐

  1. 四、frp内网穿透服务端frps.ini各配置参数详解

    [必须]标识头[common]是不可或缺的部分 [必须]服务器IPbind_addr = 0.0.0.00.0.0.0为服务器全局所有IP可用,假如你的服务器有多个IP则可以这样做,或者填写为指定其中 ...

  2. ProxySQL(9):ProxySQL的查询缓存功能

    文章转载自: https://www.cnblogs.com/f-ck-need-u/p/9314459.html ProxySQL支持查询缓存的功能,可以将后端返回的结果集缓存在自己的内存中,在某查 ...

  3. 10.使用nexus3配置golang私有仓库

    1,前言说明 golang是近来非常火热的语言,但是处理其依赖包一直都是一个让人头疼的问题,尤其是在国内,开发者需要下载一些官方的包的时候,就会非常苦恼.尽管已经有了私服 Athens,公司也已经搭建 ...

  4. 在图片不被裁剪时opencv绕图片中任意点旋转任意角度

    opencv绕图片中任意角度旋转任意角度   最近在做项目需要把把图片绕图片中任意点旋转任意角度,考虑到自己旋转需要编写插值算法,所以想到了用opencv,但是网上都是围绕图片中点旋转任意角度的,都是 ...

  5. C# 内存泄漏之 Internal 关键词代表什么?

    一:背景 1. 背景 前段时间有位朋友咨询说他的程序出现了非托管内存泄漏,说里面有很多的 HEAP_BLOCK 都被标记成了 Internal 状态,而且 size 都很大, 让我帮忙看下怎么回事? ...

  6. Spring笔记三

    Spring-03 1. AOP 1.1 概念 ​ AOP为Aspect Oriented Programming的缩写,意为:面向切面编程.他是一种可以在不修改原来的核心代码的情况下给程序动态统一进 ...

  7. ARC148游记

    A - mod M 题目链接 这道题我们可以首先对于所有的数 $%2$ ,可以证明出答案最多不超过 $2$ ,此时我们就可以把问题转化为:是否存在一个数使得序列 $a$ 中所有元素减去这个数之后的最大 ...

  8. POJ2728 Desert King (最小生成树、0/1分数规划)

    显然的0/1分数规划问题,用二分来解决,检验mid,就用prim算法求最小生成树,看总边权是否大等于0即可验证. 1 #include<bits/stdc++.h> 2 using nam ...

  9. HDU2041 超级楼梯 (线性DP)

    fn[i]表示走上第i级台阶的所有走法. 方程:fn[i]=fn[i-1]+fn[i-2]; 1 #include<cstdio> 2 #define MAXN 40 3 using na ...

  10. Linux中CentOS 7版本安装JDK、Tomcat、MySQL、lezsz、maven软件详解

    软件安装 在Linux系统中,安装软件的方式主要有四种,这四种安装方式的特点如下: 安装方式 特点 二进制发布包安装 软件已经针对具体平台编译打包发布,只要解压,修改配置即可 rpm安装 软件已经按照 ...