Hi Alexi

Typically you would use a key to guarantee that messages with the same key
have a global ordering, rather than using manual assignment. Kafka will
send all messages with the same key to the same partition. If you need
global ordering, spanning all messages from a single producer, you can use
a single partition topic. This will limit you to one active consumer per
consumer group as the consumer group protocol guarantees that a partition
can only be assigned to one consumer, within a group, at one time.

B

On Wed, Dec 21, 2016 at 4:36 AM Alexei Levashov <
alexei.levas...@arrayent.com> wrote:

> Hello,
> I have a few newbie questions about usage of Kafka as a messaging system.
> Kafka version - 0.10.1.0.
>
> 1 - Let's assume that I want to ensure time sequence of events i.e. if
> message A from producer was published at time t1 to partition P and message
> B from the same producer published to partition P at time t2,
> I want to consume message A before message B, provided t1<t2.
>
> Question1,
> Do I have any choice except one consumer per partition?
>
> 2. - If I have one consumer per partition and use
>  consumer.assign(partitionList) call to assign consumer to a partition do I
> still need group membership for this single consumer?
>      I didn't find clear description what is the protocol of interaction
> between GroupCoordinator and PartitionLeader
> <
> https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Client-side+Assignment+Proposal
> >
> will be in case of  "manual" partition assignment.
>      On one hand the API documentation
> <
> https://kafka.apache.org/0101/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html
> >
> says
> that :
>      "Manual partition assignment does not use group coordination, so
> consumer failures will not cause assigned partitions to be rebalanced.
>       Each consumer acts independently even if it shares a groupId with
> another consumer.
>       To avoid offset commit conflicts, you should usually ensure that the
> groupId is unique for each consumer instance."
>
>       On the other hand I am still consuming messages in
> consumer.poll(timeout) loop and inside this poll() call consumer should
> send heartbeats to coordinator.
>
> Question 2 .
>      If consumer doesn't send these heartbeats for [*session.timeout.ms
> <http://session.timeout.ms>*] period of time  should the partition
> ownership be revoked or not?
>
>      If no - does it mean I have to use homegrown heartbeats for consumer
> state monitoring? How would the application know that the consumer thread
> is dead?
>      If yes - what callback to notify the application can I use?
> ConsumerRebalanceListener is available only for group subscription.
>
> Thank you.
>

Reply via email to