[DB] Kafka
介绍
- 一种高吞吐量的分布式发布订阅消息系统
- 消息类型:主体Topic(广播)、队列Queue(一对一)
- 消息系统类型:同步消息系统、异步消息系统
- 常见消息产品:Redis、Kafka、JMS
术语
- Producer:生产者,向 Kafka Broker 上的 Topic 发布消息的应用程序
- Broker:缓存代理服务进程,一个Kafka 集群由多个 Broker 组成,Broker 负责接收和处理客户端发送过来的请求,以及对消息进行持久化
- Message:消息,通信的基本单位,每个 Producer 可以向一个 Topic 发布消息
- Topic:承载消息的逻辑容器,在实际使用中多用来区分具体的业务
- Partition:Topic物理上的分组,一个Topic可以分为多个Partition,每个Partition是一个有序的队列。Partition中的每条消息都会被分配一个有序的id(Offset),一个分区对应一个消费者
- Consumer:消费者,订阅 Topics 并从上面拉取消息的应用程序
- Group:消费组,多个消费者组成一个消费组
- Offset:表示分区中每条消息的位置信息,是一个单调递增且不变的值,消费者在消费的过程中使用 Offset 记录自己消费了多少数据。老版本用zookeeper存储offset,当consumer宕机重启后读取offset,从上次消费截止的地方继续消费。新版本将offset作为普通消息存在kafka中,提交到__consumer_offsets中保存
- Coordinator:协调者,为 Consumer Group 服务,负责为 Group 执行 Rebalance 以及提供位移管理和组成员管理等,所有 Broker 都有各自的 Coordinator 组件
流程
- Producer将消息推送到Broker,Consumer从Broker拉取消息
- 每条消息被顺序写入到Partition中
- 同一Topic的一条消息只能被同一个Consumer Group内的一个Consumer消费,多个Consumer Group可同时消费这一消息
- 将 Consumer 的位移数据作为一 条条普通的 Kafka 消息,提交到位移主题 __consumer_offsets 中
- Kafka 集群中的第一个 Consumer 程序启动时,Kafka 会自动创建位移主题

设计要点
- 内存访问:使用Linux文件系统的cache,高效缓存数据
- 磁盘持久化:不再内存中cache,直接顺序写入磁盘
- zero-copy:减少IO操作
- 消息处理:支持数据批量发送压缩
- 主题分区:Topic 划分为多个 Partition,提高消息处理并行度
- 负载均衡:Producer 根据用户指定算法,将消息发送到指定的 Partition
- 消息拉取:简化kafka设计,Consumer根据消费能力自主控制消息拉取速度,自主选择消费模式
- 可扩展性:需要增加 Broker结点时,新增 Broker向 ZK 注册,Procucer 和 Consumer根据 ZK 上的 Watcher 调整
应用场景
- 消息队列
- 行为跟踪
- 元信息监控
- 日志收集
- 流处理
命令
- Broker配置文件:config/server.properties
- id:0
- 端口:9092
- zookeeper:localhost:2181
- 启动:bin/kafka-server-start.sh config/server.properties &
- 创建主题:bin/kafka-topics.sh --create --zookeeper localhost:2181 -replication-factor 1 --partitions 3 --topic mydemo1
- 列出主题:bin/kafka-topics.sh --zookeeper bigdata111:2181 --list
- 删除主题:bin/kafka-topics.sh --zookeeper bigdata111:2181 --delete --topic mydemo1
- 生产者(发送消息):bin/kafka-console-producer.sh --broker-list localhost:9092 --topic mydemo1
- 消费者(接收消息)
- bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic mydemo1(老版本)
- bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mydemo1(新版本)



参考
Kafka 教程
https://blog.csdn.net/hmsiwtv/article/details/46960053
https://www.orchome.com/kafka/index
https://www.cnblogs.com/wq3435/p/8001094.html
Kafka 中 bootstrap-server broker-list 和 zookeeper的区别
https://www.cnblogs.com/tonglin0325/p/8810313.html
Kafka offset
https://www.cnblogs.com/wq3435/p/8001094.html
CDH Kafka
https://www.cnblogs.com/yangshibiao/p/10868615.html
SparkStreaming Kafka
https://www.jianshu.com/p/667e0f58b7b9
Exactly Once
https://blog.csdn.net/liangyihuai/article/details/82931140
Resetting first dirty offset of __consumer_offsets
https://www.pianshen.com/article/3368623605/
[DB] Kafka的更多相关文章
- Kafka监控系统Kafka Eagle:支持kerberos认证
在线文档:https://ke.smartloli.org/ 作者博客:https://www.cnblogs.com/smartloli/p/9371904.html 源码地址:https://gi ...
- Kafka监控系统Kafka Eagle剖析
1.概述 最近有同学留言反馈了使用Kafka监控工具Kafka Eagle的一些问题,这里笔者特意整理了这些问题.并且希望通过这篇博客来解答这些同学的在使用Kafka Eagle的时候遇到的一些困惑, ...
- kafka监控kafka-eagle 容器化配置
由于kafka.zk 集群已经部署在k8s中, kafka的服务名 kafka-hs, zk的服务名为:zk-cs ,对kafka进行监控,所以需要把监控部署到k8s中,选择使用kafka-eagl ...
- Kafka集群监控工具之二--Kafka Eagle
基于kafka: kafka_2.11-0.11.0.0.tgz kafka-eagle-bin-1.2.1.tar.gz 1.下载解压 tar -zxvf kafka-eagle-bin-1.2.1 ...
- Kafka学习之(七)搭建kafka可视化服务Kafka Eagle
一.下载安装包 kafka-eagle-bin-1.2.4.tar.gz 百度云链接:链接:https://pan.baidu.com/s/1SNIkpsvs20A_Ljtx5PaMuA 密码:o4 ...
- 使用canal获取mysql的binlog传输给kafka,并交由logstash获取实验步骤
1. 实验环境 CPU:4 内存:8G ip:192.168.0.187 开启iptables防火墙 关闭selinux java >=1.5 使用yum方式安装的java,提前配置好JAVA_ ...
- Kafka Eagle 安装
Kafka Eagle 是一款开源的 Kafka 集群监控系统. 一.下载 https://download.kafka-eagle.org/ 二.安装 # 解压 .tar.gz -C /opt/ / ...
- 使用kafka-eagle监控Kafka
# 监控kafka集群,开启监控趋势图使用 # 有一个问题,需要在kafka-server-start.sh文件中配置端口,有如下三种办法 # 第一种:复制并修改kafka目录,比如kafka-1,k ...
- Kafka Eagle安装详情及问题解答
1.概述 最近有很多同学给笔者留言,说在安装Kafka Eagle的时候,会遇到一些问题,请教如何解决?今天笔者就在这里总结一下安装步骤,和一些安装的注意事项,以及解决方式. 2.内容 在安装Kafk ...
随机推荐
- vue 快速入门 系列 —— 侦测数据的变化 - [vue 源码分析]
其他章节请看: vue 快速入门 系列 侦测数据的变化 - [vue 源码分析] 本文将 vue 中与数据侦测相关的源码摘了出来,配合上文(侦测数据的变化 - [基本实现]) 一起来分析一下 vue ...
- java进阶(38)--线程安全
文档目录: 一.概念 二.解决方案 三.举例说明 ---------------------------------------分割线:正文------------------------------ ...
- CSS 文字装饰 text-decoration & text-emphasis
在 CSS 中,文字算是我们天天会打交道的一大类了,有了文字,则必不可少一些文字装饰. 本文将讲讲两个比较新的文字装饰的概念 text-decoration 与 text-emphasis,在最后,还 ...
- redis setNx原子锁
https://github.com/suqi/rlock/blob/master/rlock.py 保持逻辑并发情况不产生多次结果 常用于下单,钱包,抢购,秒杀等场景 1 LOCK_TIMEOUT ...
- CSS完成视差滚动效果
一.是什么 视差滚动(Parallax Scrolling)是指多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验 我们可以把网页解刨成:背景层.内容层.悬浮层 当滚动鼠标滑轮的时候 ...
- 如何在CSS中映射的鼠标位置,并实现通过鼠标移动控制页面元素效果
映射鼠标位置或实现拖拽效果,我们可以在 JavaScript 中做到这一点.但实际上,在CSS中有更加简洁的方法,我们可以在不使用JavaScript 的情况下,仍然可以实现相同的功能! 只使用CSS ...
- 一.文件处理和json模块(容易混淆知识点即用法)
一.文件处理 注意点1: 打开文件包含两部分资源:操作系统级打开得文件+应用程序的变量. 在操作完毕一个文件时,必须把该文件的两部分资源一个不落的回收 如下: f.close() #回收操作系统级打开 ...
- JDBC_02_JDBC连接数据库 (INSERT INTO)
JDBC连接数据库 (INSERT INTO) String url="jdbc:mysql://127.0.0.1:3306/employ?useUnicode=true&char ...
- Day15_86_通过反射机制获取所有方法(method)
通过反射机制获取所有方法(method) import java.lang.reflect.Field; import java.lang.reflect.Method; import java.la ...
- 数据结构之List | 让我们一块来学习数据结构
列表[List]的定义 列表是一组有序的数据.每个列表中的数据项称为元素.在 JavaScript 中,列表中的元素 可以是任意数据类型.列表中可以保存多少元素并没有事先限定,实际使用时元素的数量 受 ...