Kafka FAQ

命令格式:kafka-consumer-groups.sh –bootstrap-server IP:端口,IP:端口 –describe –group 组名

例如:./kafka-consumer-groups.sh –bootstrap-server 192.168.110.97:9092 –group group –describe

Kafka FAQ

RabbitMQ 自带一个管理界面, Kafka就比较原始了. 下面比较一下 RabbitMQ和Kafka:

  • Kafka支持消息重播. 假如要接入FLink,就不能用RabbitMQ
  • RabbitMQ的优势在于能够灵活地路由消息,Kafka不支持路由。 Kafka主题分为多个分区,每个分区包含不可更改的消息
  • RabbitMQ支持优先级队列,Kafka中,不能以优先级顺序发送消息。 Kafka中的所有消息都按照接收顺序存储和传递。
  • RabbitMQ采用Push 推送消息, Kafka采用Pull请求, 消费者从给定偏移量中请求一批消息

再比较一下 Pulsar和Kafka:

  • plusar扩容,增加节点时比kafka更快更方便,P而Puslar是对数据分片,容易扩展 ;Kafka的topic的性能扩展受限于partitions的个数
  • 流量负载均衡. Kafka要用商业工具,手动操作.比较麻烦(需求迁移分区,相当增加副本)
  • Pulsar分层存储,您可以自动将旧消息推入实际上无限,廉价的云存储. Kafka现在Broker和存储是一体的

选择Pulsar而不是Kafka的5个原因 系列一:关于kafka的思考——后kafka时代下的消息队列,Kafka还会走多远?

Kafka Improvement Proposals – Apache Kafka – Apache Software Foundation

新浪微博从 Kafka 到 Pulsar 的演变

假设每日有1000w条消息, 每条消息10kB, 消息储存7天,用不同的消息队列,价格是多少呢?

消息队列 Pulsar 版 价格总览 按腾讯云这个价格 API 调用12002=2400元,存储价格7TB=7000G0.42/周*3 副本=8820, 主题每月不能超2000个,不然另外收费. 毛估一下每月1万2打住了.但是用Pulsar的假如是多租户在用,主题数可能是10w+, 假如按0.2元/个/天的主题价格, 那不是要60万了???? 我算错了吗?

阿里云kafka 计算下来1个月1万左右, 感觉2者价格差不多

消息队列 RabbitMQ 版包年包月, 每日有1000w条消息折算下面每秒才115条消息*2=230, 选用TPS 10000/秒就应该绰绰有余了, 一个月才1300,便宜好多啊, 不过阿里云最高TPS才5000/秒, 超过这个数量的还是选择Pulsar了吧.

用kafkaTemplate 一个连接连续发送10w条记录,用8个线程发只需要1.6秒.在发送的同时接收,10w条记录4秒,速度真的挺快的哦!!!

多线程发送,消息是乱序的, 假如要有次序,只用1个线程发,3.6秒

Kafka FAQ

在console统计不了那么多,要写log,有2个配置文件要配一下

logging:
  #level 日志等级 指定命名空间的日志输出
  level:
    com.fishpro.kafka: debug   #根据包名修改
  #file 指定输出文件的存储路径
  #file: logs/app.log
  #pattern 指定输出场景的日志输出格式
  pattern:
    console: "%d %-5level %logger : %msg%n"
    file: "%d %-5level [%thread] %logger : %msg%n"

Kafka FAQ
"1.0" encoding="UTF-8"?>
"true" scanPeriod="60 seconds" debug="false">
    logback

    "console" class="ch.qos.logback.core.ConsoleAppender">

            %d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
            UTF-8

    "logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        true

        class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

                applog/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log

            15

        class="ch.qos.logback.classic.PatternLayout">

                %d{yyyy-MM-dd HH:mm:ss} -%msg%n

    "com.fishpro.kafka" additivity="false">
        ref ref="console"/>
        ref ref="logFile"/>

    "org.springframework" level="WARN"/>
    "org.mybatis" level="WARN"/>"com.ibatis" level="DEBUG"/>"com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG"/>"com.ibatis.common.jdbc.ScriptRunner" level="DEBUG"/>"com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG"/>"java.sql.Connection" level="DEBUG"/>"java.sql.Statement" level="DEBUG"/>"java.sql.PreparedStatement" level="DEBUG"/>"com.ruidou.baoqian.mapper" level="DEBUG"/>

    "error">
        ref ref="console"/>
        ref ref="logFile"/>

logback-spring.xml

kafka客户端自己决定写到哪个分区还是kafka来决定?

对消息顺序一致无强需求的场景下用kafka默认策略即可。也方便group多线程/进程消费,增加消费者吞吐。对消息顺序一致有强需求时可以将消息统一发送到同一partition,可保证消息先进先出。但对消费者吞吐产生影响。

生产者在生产数据的时候,可以为每条消息指定Key,这样消息被发送到broker时,会根据分区规则选择被存储到哪一个分区中,如果分区规则设置的合理,那么所有的消息将会被均匀的分布到不同的分区中,这样就实现了负载均衡和水平扩展。

java;gutter:true; public class SimplePartitioner implements Partitioner { @Override public int partition(Object key, int numPartitions) { int partition = 0;</p> <pre><code> String k = (String) key; partition = Math.abs(k.hashCode()) % numPartitions; return partition; } </code></pre> <p>}</p> <pre><code> 如果10w个连接,每个连接发一条消息呢? kafka如何限制连接数呢? 如何保证kafka消息不会丢失呢? </code></pre> <p>1.生产端:使用带回调的发送方法,设置acks=all (所有副本都收到),重试次数</p> <ol> <li> <p>消费端: 关闭自动位移避免消费丢失</p> </li> <li> <p>Broker端: 设置replication.factor=3, min.insync.replicas=2

kafka的可视化工具 Kafka 可视化工具(Kafka Tool)

Kafka FAQ

套装版 带control center 需要License Quick Start for Confluent Platform

Kafka FAQ

为了将 MQTT 消息集成到 Kafka 集群中,您需要某种类型的桥接器将 MQTT 消息转发到 Kafka 中。有四种不同的方法

  1. Kafka Connect for MQTT 充当 MQTT 客户端,它订阅来自 MQTT 代理的所有消息 存在性能和可伸缩性问题

  2. MQTT Proxy,需要一个功能齐全的 MQTT 代理。如果可以忍受消息丢失,那么代理方法可能是一种轻量级的替代方案

3 您自己的自定义桥接器,需要大量的开发工作,有可能崩溃,丢失消息

  1. MQTT 代理扩展 MQTT 代理经过扩展,包括一个本机 Kafka 客户端,并将 MQTT 消息转置到 Kafka 协议。这允许物联网数据同时路由到多个Kafka集群和非Kafka应用程序。使用 MQTT 代理还将提供对 IoT 设备所需的所有 MQTT 功能的访问,例如遗嘱和遗嘱。像 HiveMQ 这样的 MQTT 代理旨在实现高可用性、持久性、性能和弹性,因此可以在 Kafka 不可写的情况下在代理上缓冲消息,因此重要消息永远不会从 IoT 设备丢失。

Original: https://www.cnblogs.com/zitjubiz/p/kafka_FAQ.html
Author: Gu
Title: Kafka FAQ

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/564914/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球