spring cloud sream:
一个通道(入,出)对应一个主题
入,出对应于服务将
出通道---队列---入通道
binder :集成任意消息中间件的组件--建立连接,集成多个kafka就用多个binder
Binding:通过binder和消息中间件,建立通信的工具组件,需要指定所用的binder(只有一个binding不用特殊指定);把通道和对列绑定,代码中操作通道即可
binder,binding的名称在配置名称的层级处可以解析
java代码操作通道(通过名称匹配),配置配置通道对应的对列
不指定消费组,会自己创建消费组(名字随机),组内只有一个消费者
支持推和拉两种方式,kafka本身是拉的方式
@EnableBinding({Source.class, Sink.class}),如果系统只是消息对的生产者,则只需Source.class;如果只是消息的消费者,则只需Sink.class。
@StreamListener(Sink.INPUT) 基于通道操作 用于指定通道
参看:https://blog.csdn.net/weixin_45925299/article/details/121152826
rabbitmq:
rabbitmq 也是channel,适应多线程的概念,一个线程一个channel
exchange 维护了一个k-v,根据客户端的key映射到不同的v(对列)
四种类型的excahge:以下逻辑工作都在exchange中进行
direct 直连 ,routingkey 采用精确匹配方式
fanout 广播(扇出去) 不进行key匹配(传了也不匹配),转发到exchange所有的对列
topic 主题(模糊匹配--主要的key) routkey采用占位符模糊匹配key的方式,获取对应的对列,模糊的配置在exchange的key,不在客户端发的key
header 通过header中的参数对比,预设的参数和提供的参数相等的就是对应的对流
rabbit 路由规则灵活,消息消费就删除和activemq 的queue一致,消费顺序不强一致
kafka 吞吐量大,统一的消息过期时间,可以保证顺序消费
activemq :queue(先到先消费,消费删除)---点对点---多个消费者竞争消费,topic(支持多个不同消费者等量消费)--发布订阅
rabbit:topic(消费即删除)--多个消费者竞争消费,实际就是queue
kafka:topic 支持多个不同消费者等量消费 ,消费不立即删除(统一过期删除)---不同消费组中的消费者等量消费
拉的方式用长轮询的方式,建立socket连接,设置较长的超时时间,在超时内,会一直有连接,一有消息就获取,直到超时,重新建立连接,减少连接次数
Kafka集群由一个或多个服务器组成。在kafka的世界里,他们被称为代理(brokers)。每个代理持有属于整个集群的记录子集。Kafka将一个特定主题的分区分布到多个broker上。通过这样做,我们将得到以下好处
分区分散到不同的broker,然后错开副本
acks为0:这意味着producer发送数据后,不会等待broker确认,直接发送下一条数据,性能最快
acks为1:为1意味着producer发送数据后,需要等待leader副本确认接收后,才会发送下一条数据,性能中等
acks为-1:这个代表的是all,意味着发送的消息写入所有的ISR集合中的副本(注意不是全部副本)后,才会发送下一条数据,性能最慢,但可靠性最强
高水位:hw是对外显示的所以是一致的
leo:最后的信息点,由于副本之间同步leader有差距,所以不同,最小的leo就是hw,
每个副本存有自己的hw,leo,header存有自己的同时还有其他的节点信息
副本宕机,从主获取hw截取此之后自己的信息----木桶原则
header宕机,新的主把所用父本中最小的leo作为自己hw,然后其他节点同步
参看:https://baijiahao.baidu.com/s?id=1732891548341088166&wfr=spider&for=pc