作者回复: 不会的。消息重试只是简单地将消息重新发送到之前的分区
作者回复: 我们公司之前也有一个业务是单分区,要保证全局顺序。后来发现其实使用key+多分区也可以实现。反正保证同一批因果依赖的消息分到一个分区就可以
作者回复: 嗯嗯,确实是写错了,抱歉~~
作者回复: 可以选择。kafka-topics支持在创建topic时指定partition放在那些broker上
作者回复: 1. 根据默认分区策略,同一个key的消息肯定会发送到同一个分区
2. 首先,你的消息会被发送到某个分区的leader副本上。这个分区的leader副本只能存在于3个broker中的一个,但是如果test的副本数是3,那么一条消息也会被备份到其他两个broker上。只是只有leader副本对外提供服务,因此没有顺序乱的情况出现。
3. 如果想保证顺序,指定消息key即可,这样能保证分送到同一个分区上。是否发到同一个broker上无关紧要
作者回复: 嗯嗯,可能我没说清楚。如你说所rebalance是非常常见,如果再要求消费时消息有明确前后关系,这个就很复杂了。常见的做法是单分区来保证前后关系,但是这可能不符合很多使用场景。
我给出了另一个建议,就是设置partition.assignment.strategy=Sticky,这是因为Sticky算法会最大化保证消费分区方案的不变更。假设你的因果消息都有相同的key,那么结合Sticky算法有可能保证即使出现rebalance,要消费的分区依然有原来的consumer负责。
作者回复: 可以试试sticky assignor,即设置consumer端参数partition.assignment.strategy=class org.apache.kafka.clients.consumer.StickyAssignor
作者回复: 嗯嗯,这个不太清楚,不敢妄言。。。
作者回复: 通常1台broker上有多个分区依然能提升TPS,毕竟单个分区消耗不掉大部分的系统资源。当然一切以实际测试结果为准。
作者回复: 使用这个方法:consumer.assign()直接消息指定分区
作者回复: 之前也曾经回答过,不一定客观,姑且听之。在我看来RocketMQ与Kafka的主要区别 :1. Kafka吞吐量大,多是面向大数据场景。RocketMQ吞吐量也很强, 不过它号称是金融业务级的消息中间件,也就是说可以用于实际的业务系统;2. RocketMQ毕竟是阿里出品,在国内技术支持力度要比Kafka强;3. Kafka现在主要发力Streaming,RocketMQ在流处理这块表现如何我不太清楚,至少streaming不是它现阶段的主要卖点。
其他方面这两者确实都差不多~~
作者回复: 0.11开始支持事务了。嗯,并没有所谓的事务消息,不过倒是有事务标记消息(transaciton marker)。事务Consumer靠它来判断消息的可见性——即什么消息属于已提交事务的消息,事务consumer能够读取。
作者回复: 1. 引入了新类型的消息来支持事务,如transaction marker消息
2. 主要依赖transaction coordinator组件使用两阶段提交来保证多分区的原子性写入
3. 需要开启
作者回复: 不太合适。超多分区导致磁盘性能也会下降。key有2w个,为什么分区也要有2w个呢?
作者回复: 不能了~~
作者回复: 感觉没什么区别,只是缓存中的微弱区别罢了。