• Kafka


    一.kafka是什么

    二.它与传统jms不同的地方.

    三: 组成部分,主要是有哪些组件组成

    四: Consumer和topic的关系.

    1.消息队列消费者消费了重复的数据?  怎么去避免.

    把kafka消费者的配置enable.auto.commit设为false,禁止kafka自动提交offset,自动提交的时候数据没有完成消费的情况下也能够提交offset 

    简单概括为(拿大神的词汇用用):

    Kafka框架:

      producer生产者

      consumer消费者

      broker篮子

      topic给馒头打一个标签,具体给谁吃的馒头

    生产者生产的消息可以有多个消费者去拉取进行消费 .可以是一对一 也可以是多对多,也可以一对多和多对一

    五、

    给每个消息增加全局的ID,类似于订单的ID,消费的时候去对比一下,之前是否消费过。多消费一样的,Kafka是发布订阅的消息队列

     上个消费者消费后你标记了,下一个消费者怎么判断,统一的放进redis去比较,还有你刚才说的故障容错,消息会被接管,那两个消息是相同的吗

    用redis set消息队列消息丢失了,天然的幂等性

    六、 

    如何保证消息队列的消息不要丢失?
    换句话说如何保证消息队列的数据不要丢失

    这个问题有这种情况
    一种是mq自己弄丢了
    另外一种情况是消费者把数据弄丢了消费者消费后给一个返回值 看是否弄丢 弄丢了再给去弄一个?

    先说rabbitMq,生产者丢失数据,rabbitmq是提供事物功能的
    在生产数据之前开启事物,数据如果没有被ra收到,就会异常的报错,就可以回滚事物
    但是,打开事物会影响性能的,还有一个方案,开启confirm模式,你每次写的消息都会分配一个唯一的id
    如果写入rabbitmq,就会返回一个ack,告诉你消息OK了
    如果rabbitmq没能处理这个消息,就会回调nack接口,告诉你消息接收失败,可以重试
    第二mq丢失消息,开启rabbitmq持久化,将消息持久化到磁盘中,就算mq挂了,数据也不会丢失,这是rabbitMq(通常用于核心业务)。

    消费端弄丢了数据,Kafka默认的是自动提交offset,应该变成手动提交 ,这样消费端不就弄不丢数据
    kafka弄丢了数据,某个broker宕机,其他的顶上
    这里面有数据是不是最新的问题,也就是leader和follower数据没有同步,数据还是丢了

    这个时候配置参数,给这个topic设置replication.factor参数,这个值必须大于1,要求每个partition必须有至少2个副本,kafka服务端设置min.insync.replicas参数:这个值必须大于1
    这个是要求一个leader至少感知到有至少一个follower还跟自己保持联系,没掉队,这样才能确保leader挂了还有一个follower吧
    ISR表中,
    在producer端设置acks=all:,这个是要求每条数据,必须是写入所有replica之后,才能认为是写成功了

    还有一个ISR表
    记录着那些follower和自己的数据时差不多一致的
    现在就是拉的时候要保证数据已经是一致的时候才能够拉取了
    如果在某个时间之内,leader和follower不一致就会从这个isr表中剔除掉,这就是kafka的保障机制

    (它这种剔除只是暂时的,没说数据就没法传输了)

    七、

    操作kafka的一些命令: 

    创建topic
    bin/kafka-topics.sh --create --zookeeper 139.129.21.117:2181 --replication-factor 1 --partitions 1 --topic test
    查看topic
    bin/kafka-topics.sh --list --zookeeper 139.129.21.117:2181

    发送消息
    bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
    消费消息
    bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning


    前台启动
    ./kafka-server-start.sh /usr/local/kafka_2.10-0.8.1.1/config/server.properties

    后台启动
    ./kafka-server-start.sh -daemon /usr/local/kafka_2.10-0.8.1.1/config/server.properties

     八、

    分布式和集群区别?

    每个节点都有元数据,而且都是一样的,等于说,复制一份,放在另外一个节点上
    分布式呢,是=元数据分布在不同的节点上。

    eg:

    纯天然Elasticsearch分布式的
    Solr可以做成集群
    RabbitMq不是分布式的
    Kafka是分布式的

     九、

    下次再议:

    LEO表示每个partition的log最后一条Message的位置

    HW:最高水位线

  • 相关阅读:
    Hibernate整合Druid数据库连接池遇到的问题整合
    Spring 整合quartz 时 定时任务被调用两次以及quartz 的配置
    BigDecimal divide:Non-terminating decimal expansion; no exact representable decimal result.
    Hibernate: Encountered a duplicated sql alias [] during auto-discovery of a native-sql
    oracle与mysql的区别
    搜索评价指标——NDCG
    java 动态修改注解值
    eclipse 取消置顶
    Xiangqi
    All in All
  • 原文地址:https://www.cnblogs.com/holyshengjie/p/8977943.html
Copyright © 2020-2023  润新知