kafka原理及Docker环境部署-程序员宅基地

技术标签: java  运维  大数据  

技术原理

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka为处理实时数据提供一个统一、高吞吐、低延迟的平台。其持久化层本质上是一个“按照分布式事务日志架构的大规模发布/订阅消息队列”,这使它作为企业级基础设施来处理流式数据非常有价值。此外,Kafka可以通过Kafka Connect连接到外部系统(用于数据输入/输出),并提供了Kafka Streams——一个Java流式处理库 (计算机)。

Kafka是一个分布式的、高吞吐量、高可扩展性的消息系统。Kafka 基于发布/订阅模式,通过消息解耦,使生产者和消费者异步交互,无需彼此等待。Ckafka 具有数据压缩、同时支持离线和实时数据处理等优点,适用于日志压缩收集、监控数据聚合等场景。

关键名词:

  • broker:kafka集群包含一个或者多个服务器,服务器就称作broker
  • producer:负责发布消息到broker
  • consumer:消费者,从broker获取消息
  • topic:发布到kafka集群的消息类别。
  • partition:每个topic划分为多个partition。
  • group:每个partition分为多个group

架构示意图

一个典型的Kafka集群中包含若干Producer(可以是web前端FET,或者是服务器日志等),若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),若干ConsumerGroup,以及一个Zookeeper集群。

Kafka通过Zookeeper管理Kafka集群配置:选举Kafka broker的leader,以及在Consumer Group发生变化时进行rebalance,因为consumer消费kafka topic的partition的offsite信息是存在Zookeeper的。

Producer使用push模式将消息发布到broker,Consumer使用pull模式从broker订阅并消费消息。

一个典型的Cloud Kafka集群如上所示。其中的生产者Producer可能是网页活动产生的消息、或是服务日志等信息。生产者通过push模式将消息发布到Cloud Kafka的Broker集群,消费者通过pull模式从broker中消费消息。消费者Consumer被划分为若干个Consumer Group,此外,集群通过Zookeeper管理集群配置,进行leader选举,故障容错等。

kafka特点:

  • 它是一个处理流式数据的”发布-订阅“消息系统。
  • 实时高效处理流式数据:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。
  • 将数据安全存储在分布式集群。
  • 它是运行在集群上的。
  • 它将流式记录存储在topics中。
  • 每个record由key, value和timestamp组成。

Docker搭建

参考:https://github.com/wurstmeister/kafka-docker

docker-compose.yml如下:

 
version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    volumes:
      - ./data:/data
    ports:
      - "2181:2181"
       
  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 10.154.38.115
      KAFKA_MESSAGE_MAX_BYTES: 2000000
      KAFKA_CREATE_TOPICS: "Topic1:1:3,Topic2:1:1:compact"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - ./kafka-logs:/kafka
      - /var/run/docker.sock:/var/run/docker.sock
 
  kafka-manager:
    image: sheepkiller/kafka-manager
    ports:
      - 9020:9000
    environment:
      ZK_HOSTS: zookeeper:2181
 

参数说明:

  • KAFKA_ADVERTISED_HOST_NAME:Docker宿主机IP(如果你要配置多个brokers,就不能设置为 localhost 或 127.0.0.1)
  • KAFKA_MESSAGE_MAX_BYTES:kafka(message.max.bytes) 会接收单个消息size的最大限制,默认值为1000000 , ≈1M
  • KAFKA_CREATE_TOPICS:初始创建的topics,可以不设置
  • 环境变量./kafka-logs为防止容器销毁时消息数据丢失。
  • 容器kafka-manager为yahoo出可视化kafka WEB管理平台。

操作命令:


# 启动:
$ docker-compose up -d
 
# 增加更多Broker:
$ docker-compose scale kafka=3
 
# 合并:
$ docker-compose up --scale kafka=3
 

Kakfa使用

1,Kafka管理节点

2,主题

environment:
      KAFKA_CREATE_TOPICS: "Topic1:1:3,Topic2:1:1:compact"

Topic1有1个Partition和3个replicas, Topic2有2个Partition,1个replica和cleanup.policy为compact。

Topic 1 will have 1 partition and 3 replicas, Topic 2 will have 1 partition, 1 replica and a cleanup.policy set to compact.

3,读写验证

读写验证的方法有很多,这里我们用kafka容器自带的工具来验证,首先进入到kafka容器的交互模式:

docker exec -it kafka_kafka_1 /bin/bash

创建一个主题:

/opt/kafka/bin/kafka-topics.sh --create --zookeeper 192.168.31.84:2181 --replication-factor 1 --partitions 1 --topic my-test

查看刚创建的主题:

/opt/kafka/bin/kafka-topics.sh --list --zookeeper 192.168.31.84:2181

发送消息:

/opt/kafka/bin/kafka-console-producer.sh --broker-list 192.168.31.84:9092 --topic my-test
This is a message
This is another message

读取消息:

/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server 192.168.31.84:9092 --topic my-test --from-beginning

使用场景

  • 日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。

  • 消息系统:解耦和生产者和消费者、缓存消息等。
  • 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。
  • 运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。
  • 流式处理:比如spark streaming和storm

参考:

1,https://www.jianshu.com/p/bfeceb3548ad
2,https://www.jianshu.com/p/7f089cdff29a
3,https://www.cnblogs.com/iforever/p/9130983.html
4,利用flume+kafka+storm+mysql构建大数据实时系统
5,Kafka系列(四)Kafka消费者:从Kafka中读取数据
6,基于Docker搭建分布式消息队列Kafka

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34260991/article/details/89619946

智能推荐

c++小程序1,按点击率显示歌曲2,插入加密3,乘法计算器4,大写转小写 5,单位换算_按点击率显示歌曲c++-程序员宅基地

文章浏览阅读637次。c++小程序1,按点击率显示歌曲2,插入加密3,乘法计算器4,大写转小写 5,单位换算_按点击率显示歌曲c++

Clone方法_clone 方法报错、-程序员宅基地

文章浏览阅读569次。对象的Clone方法,如果Override,知_clone 方法报错、

实体类多层嵌套 遍历_对象遍历,多层嵌套数组,for in方法对象遍历,map方法数组遍历...-程序员宅基地

文章浏览阅读1.1k次。// 数据格式objData: {code: 0,data: [{msg: "200",data: [{name: "张三",age: 18,sex: "男"}]},{msg: "200",data: [{name: "张气",age: 11,sex: "男"}]},{msg: "200",data: [{name: "张五",age: 12,sex: "女"}]},{msg: "200",dat..._实体类嵌套对象

Android Studio finish()方法的使用与解决app点击“返回”,即直接退出的问题_android 返回桌面不 finish-程序员宅基地

文章浏览阅读4.1k次,点赞3次,收藏8次。在这里,我们将用到finish(),简单介绍一下它的使用:finish()官方解析:Call this when your activity is done and should be closed. The ActivityResult is propagated back to whoever launched you via onActivityResult().“当你打开的Activit..._android 返回桌面不 finish

gazebo+rviz中配置UR+robotiq_gripper夹爪,最详细操作过程_roboticsgroup_gazebo_plugins-程序员宅基地

文章浏览阅读6.9k次,点赞11次,收藏115次。gazebo中配置robotiq1.下载功能包1.UR机器人功能包下载最原始的ros-industrial提供的robotiq夹爪的功能包,是不能用在gazebo中仿真的,只能在rviz中可视化,原因就是其urdf文件,或者说xacro文件中缺少在gazebo中需要的东西。下面就具体说一下应该修改哪些文件:1.下载功能包1.UR机器人功能包下载github地址:这里有两种版本的功能包..._roboticsgroup_gazebo_plugins

手游外挂分类及原理介绍_安卓外挂-程序员宅基地

文章浏览阅读4.4k次,点赞2次,收藏29次。一、前言移动游戏市场近几年突然爆发,收入规模快速增长。根据第三方数据统计,如图所示,国内移动游戏2015年市场规模已达514.6亿。如此火热的市场,必然会吸引大量图谋不轨的坏人。外挂已在移动市场悄然兴起。目前移动游戏市场上,有多方需求在催促外挂的发展。比如打金工作室,想更高效地刷取游戏货币;大量屌丝玩家,想花少量的钱得到更大快感;竞品公司或者恶意玩家,想恶意破坏游戏正常活动运营。这类外挂会影响到游戏开发商的收益及游戏玩家的体验。作为移动游戏从业者,必须开始了解外挂,关注外挂。本篇幅着重介绍下._安卓外挂

随便推点

Android技术内幕.系统卷-程序员宅基地

文章浏览阅读290次。Android技术内幕.系统卷 01_Android系统概述.pdf:http://www.t00y.com/file/6024145202_Android系统开发综述.pdf:http://www.t00y.com/file/6024145303_Android的linux内核与驱动..._android技术内幕.系统卷(扫描版)

使用fastreport以代码方式创建报表-程序员宅基地

文章浏览阅读316次。Report report = new Report();// register the "Products" tablereport.RegisterData(dataSet1.Tables["Products"], "Products");// enable it to use in a reportreport.GetDataSource("Products").Enabled =..._fastreport 代码生成分级报表

JDBC for MySQL 最新jar包下载_jdbc for mysql下载-程序员宅基地

文章浏览阅读7.2k次,点赞4次,收藏8次。下载地址:传送门双击加压压缩包:_jdbc for mysql下载

蓝桥杯 ALGO-78 算法训练 确定元音字母位置_c++返回给定字符串s中元音字母的首次出现位置。英语元音字母只有‘a’、‘e’、‘-程序员宅基地

文章浏览阅读902次。输入一个字符串,编写程序输出该字符串中元音字母的首次出现位置,如果没有元音字母输出0。英语元音字母只有‘a’、‘e’、‘i’、‘o’、‘u’五个。样例输入:hello样例输出:2样例输入:apple样例输出:1样例输入:pmp样例输出:0#include using namespace std;int main() { stri_c++返回给定字符串s中元音字母的首次出现位置。英语元音字母只有‘a’、‘e’、‘

华为交换机配置命令汇总_slave auto-update config-程序员宅基地

文章浏览阅读1.1w次,点赞10次,收藏98次。VRP系统基本使用◆command-privilege level rearrange ——用户级别为15级才能执行,将所有缺省注册为2、3级的命令,分别批量提升到10和15级。◆undocommand-privilege level rearrange——批量恢复。◆command-privilege levellevelviewview-namecomman-ke..._slave auto-update config

python学习笔记 4 - 线性回归、波士顿房价数据分析_波士顿房价数据集线性回归结果及分析-程序员宅基地

文章浏览阅读5.6k次,点赞4次,收藏76次。什么是机器学习?给定一组(x(i), y(i)),给定一个模型,将x(i)输入模型后得到y(i)^计算y(i)和y(i)^的差距,差距越小,模型越优。通过不断地优化模型,使得差距越来越小,这就是机器学习_波士顿房价数据集线性回归结果及分析

推荐文章

热门文章

相关标签