Maybe I'm missing something, but I don't see how you get a quorum in only 2
datacenters (without splitbrain problem, etc).  I also don't know how well
ZK will work cross-datacenter.

As far as the spark side of things goes, if it's idempotent, why not just
run both instances all the time.



On Tue, Apr 19, 2016 at 10:21 AM, Erwan ALLAIN <eallain.po...@gmail.com>
wrote:

> I'm describing a disaster recovery but it can be used to make one
> datacenter offline for upgrade for instance.
>
> From my point of view when DC2 crashes:
>
> *On Kafka side:*
> - kafka cluster will lose one or more broker (partition leader and replica)
> - partition leader lost will be reelected in the remaining healthy DC
>
> => if the number of in-sync replicas are above the minimum threshold,
> kafka should be operational
>
> *On downstream datastore side (say Cassandra for instance):*
> - deploy accross the 2 DCs in (QUORUM / QUORUM)
> - idempotent write
>
> => it should be ok (depends on replication factor)
>
> *On Spark*:
> - treatment should be idempotent, it will allow us to restart from the
> last commited offset
>
> I understand that starting up a post crash job would work.
>
> Question is: how can we detect when DC2 crashes to start a new job ?
>
> dynamic topic partition (at each kafkaRDD creation for instance) + topic
> subscription may be the answer ?
>
> I appreciate your effort.
>
> On Tue, Apr 19, 2016 at 4:25 PM, Jason Nerothin <jasonnerot...@gmail.com>
> wrote:
>
>> It the main concern uptime or disaster recovery?
>>
>> On Apr 19, 2016, at 9:12 AM, Cody Koeninger <c...@koeninger.org> wrote:
>>
>> I think the bigger question is what happens to Kafka and your downstream
>> data store when DC2 crashes.
>>
>> From a Spark point of view, starting up a post-crash job in a new data
>> center isn't really different from starting up a post-crash job in the
>> original data center.
>>
>> On Tue, Apr 19, 2016 at 3:32 AM, Erwan ALLAIN <eallain.po...@gmail.com>
>> wrote:
>>
>>> Thanks Jason and Cody. I'll try to explain a bit better the Multi DC
>>> case.
>>>
>>> As I mentionned before, I'm planning to use one kafka cluster and 2 or
>>> more spark cluster distinct.
>>>
>>> Let's say we have the following DCs configuration in a nominal case.
>>> Kafka partitions are consumed uniformly by the 2 datacenters.
>>>
>>> DataCenter Spark Kafka Consumer Group Kafka partition (P1 to P4)
>>> DC 1 Master 1.1
>>>
>>> Worker 1.1 my_group P1
>>> Worker 1.2 my_group P2
>>> DC 2 Master 2.1
>>>
>>> Worker 2.1 my_group P3
>>> Worker 2.2 my_group P4
>>> I would like, in case of DC crash, a rebalancing of partition on the
>>> healthy DC, something as follow
>>>
>>> DataCenter Spark Kafka Consumer Group Kafka partition (P1 to P4)
>>> DC 1 Master 1.1
>>>
>>> Worker 1.1 my_group P1*, P3*
>>> Worker 1.2 my_group P2*, P4*
>>> DC 2 Master 2.1
>>>
>>> Worker 2.1 my_group P3
>>> Worker 2.2 my_group P4
>>>
>>> I would like to know if it's possible:
>>> - using consumer group ?
>>> - using direct approach ? I prefer this one as I don't want to activate
>>> WAL.
>>>
>>> Hope the explanation is better !
>>>
>>>
>>> On Mon, Apr 18, 2016 at 6:50 PM, Cody Koeninger <c...@koeninger.org>
>>> wrote:
>>>
>>>> The current direct stream only handles exactly the partitions
>>>> specified at startup.  You'd have to restart the job if you changed
>>>> partitions.
>>>>
>>>> https://issues.apache.org/jira/browse/SPARK-12177 has the ongoing work
>>>> towards using the kafka 0.10 consumer, which would allow for dynamic
>>>> topicparittions
>>>>
>>>> Regarding your multi-DC questions, I'm not really clear on what you're
>>>> saying.
>>>>
>>>> On Mon, Apr 18, 2016 at 11:18 AM, Erwan ALLAIN <eallain.po...@gmail.com>
>>>> wrote:
>>>> > Hello,
>>>> >
>>>> > I'm currently designing a solution where 2 distinct clusters Spark (2
>>>> > datacenters) share the same Kafka (Kafka rack aware or manual broker
>>>> > repartition).
>>>> > The aims are
>>>> > - preventing DC crash: using kafka resiliency and consumer group
>>>> mechanism
>>>> > (or else ?)
>>>> > - keeping consistent offset among replica (vs mirror maker,which does
>>>> not
>>>> > keep offset)
>>>> >
>>>> > I have several questions
>>>> >
>>>> > 1) Dynamic repartition (one or 2 DC)
>>>> >
>>>> > I'm using KafkaDirectStream which map one partition kafka with one
>>>> spark. Is
>>>> > it possible to handle new or removed partition ?
>>>> > In the compute method, it looks like we are always using the
>>>> currentOffset
>>>> > map to query the next batch and therefore it's always the same number
>>>> of
>>>> > partition ? Can we request metadata at each batch ?
>>>> >
>>>> > 2) Multi DC Spark
>>>> >
>>>> > Using Direct approach, a way to achieve this would be
>>>> > - to "assign" (kafka 0.9 term) all topics to the 2 sparks
>>>> > - only one is reading the partition (Check every x interval, "lock"
>>>> stored
>>>> > in cassandra for instance)
>>>> >
>>>> > => not sure if it works just an idea
>>>> >
>>>> > Using Consumer Group
>>>> > - CommitOffset manually at the end of the batch
>>>> >
>>>> > => Does spark handle partition rebalancing ?
>>>> >
>>>> > I'd appreciate any ideas ! Let me know if it's not clear.
>>>> >
>>>> > Erwan
>>>> >
>>>> >
>>>>
>>>
>>>
>>
>>
>

Reply via email to